============================================================================ A-Shell Development Notes Version 5.1.1191.3 (31-Aug 2010) ============================================================================ 1. --- ISMUTL.LIT 1.3(134) now allows 0 as the record size, needed for "pure" indexes. Previously, such an index could only be created via ALLOCATE'INDEXED. 2. --- ISAM-A bug fix/enhancement: "Pure" indexes (see 5.1.1121) were not supporting the GET'LOCKED statement, which made it difficult to use UPDATE'RECORD or DELETE'RECORD to update index entries. See the sample program PURIDX.BP in the SOSLIB [908,33] account for an example. 3. --- APEX bug fix: If the native print file path (including the APEX directory) contained a "-", the printfile name got truncated there. (This wasn't critical, except when it occured in a directory name.) 4. --- XTREE XTF2_CSV fix/refinement: XTF2_CSV mode now supports XTF_COLDFX case where only pseudo-columns are defined (i.e. for colors, fonts, etc) in the COLDEF string. If no real columns are defined in the COLDEF, it then reverts to automatic column definition mode (getting the column info from the next line of the CSV), as if XTF_COLDFX had not been set (i.e. as if no COLDEF was used at all). This is now consistent with the existing documentation. 5. --- XTREE refinement: Clicking out of cell editing by clicking on a editable cell of another tree was previously sometimes requiring multiple clicks before it would enter cell editing mode in the target tree. ============================================================================ A-Shell Development Notes Version 5.1.1191.2 (25-Aug 2010) ============================================================================ 1. --- AUI_CONTROL bug fix: CTLOP_INFO wasn't returning the dllname for icon buttons (e.g. resname::dllname); introduced in 1190.5. 2. --- Array handling runtime bug fix: Any access to an unmapped array was generating a subscript out of range or out of memory error. Problem introduced in 1190.0. 3. --- Compiler bug fix (AIX only): A bad link module was resulting in segmentation fault errors during compilation. (New compiler edit: 461) ============================================================================ A-Shell Development Notes Version 5.1.1191.1 (24-Aug 2010) ============================================================================ 1. --- XTREE bug fix: cursor was being left in hourglass mode on display only trees. 2. --- XTREE refinement: when exiting from the tree is allowed with up arrow or down arrow, it now requires a minimum of 1/3 second since the last arrow key to allow the exit. (This eliminates the problem of holding down the arrow key to scroll up/down and then finding yourself out of the tree and several fields away due to the up/down arrow exiting and then being interpreted by other controls as next/prev field. 3. --- SBRC.SBR op 1 was returning both P and PN fields set to the P value. ============================================================================ A-Shell Development Notes Version 5.1.1191.0 (20-Aug 2010) ============================================================================ 1. --- New MIAMEX function MX_IATIMEOUT (180) allows querying / setting the inactivity timeout: XCALL MIAMEX, MX_IATIMEOUT, OP, TIMESECS Where: OP [num, in] Specifies whether to get (0) or set (1) the timeout. TIMESECS [num, in/out] Timeout value in seconds. If OP=0, the current timeout setting (or zero if disabled) is returned here. Otherwise the value passed in TIMESECS is used to reconfigure the current inactivity timer. Note that unlike the case in the MIAME.INI IATIMEOUT parameter, which uses units of minutes, this new MX_IATIMEOUT function uses units of seconds. 2. --- Minor refinement in the expansion heuristics used by DIMX with AUTO_EXTEND. When the array needs to be expanded, it is now expanded by a minimum of 150% of the previous array size, or 110% of the size required for the assignment triggering the expansion. But, this is then limited to no more than 128K beyond what would be required for the current assignment. Also, a 128K grace or overage is now added to the MALLOCLIMIT value, to prevent the possibility of the expansion failing because of these heuristics. 3. --- XTREE / ATE server-side bug fix: Close a loophole in the optimizer that was resulting in a failure to load a tree in an obscure multi-tree case where two trees had identical data. ============================================================================ A-Shell Development Notes Version 5.1.1190.5 (19-Aug 2010) ============================================================================ 1. --- Workaround a spurious problem in which buttons containing icons would generate a "ASHBUTTON" window class not found error (and the button wouldn't appear.) ============================================================================ A-Shell Development Notes Version 5.1.1190.4 (18-Aug 2010) ============================================================================ 1. --- XTREE bug fix: Close a timing loophole in which exiting a tree exiting a tree by clicking on another, and then re-entering the first tree, was sometimes resulting in a second (spurious) exit. ============================================================================ A-Shell Development Notes Version 5.1.1190.3 (17-Aug 2010) ============================================================================ 1. --- XTREE bug fix: a change in 1189.1 was interfering with the SelChgExit feature when triggered by a click on an inactive tree. 2. --- XTREE bug fix: the hourglass/wait-cursor was sometimes staying on after loading an XTREE, until you moved the cursor. ============================================================================ A-Shell Development Notes Version 5.1.1190.2 (16-Aug 2010) ============================================================================ 1. --- XTREE bug fix: clicking on a checkbox in an inactive tree was generating a GPF/stack overflow. (Introduced in 1189.1) ============================================================================ A-Shell Development Notes Version 5.1.1190.1 (16-Aug 2010) ============================================================================ 1. --- Bug fix: XCALLs with more than 30 floating point arguments were causing a stack or string overflow error. (Side effect of recent stack checking improvements.) 2. --- INFLD auto-complete refinement: BACKSPACE was deactivating the timer. 3. --- XTEXT (ATE server side) bug fix: Using TXFF_STRING (non-file) mode for the destination was generating a segmentation fault unless the destination variable was dynamic (i.e. S,0). ============================================================================ A-Shell Development Notes Version 5.1.1190.0 (15-Aug 2010) ============================================================================ 1. --- DIMX runtime enhancement: DIMX arrays now support reentrancy (i.e. multiple instances of the same copy of the same module can be running simultaneously.) This is mainly of interest in recursive SBX calls. (Previously, certain aspects of the DIMX variable status were shared between the instances, thus interfering with the ability to use an independent DIMX in each instance.) Note that this change is purely in the runtime system and does not require recompiling. 2. --- "UNDIMX" is now effectively supported. But rather than declare a new reserved word, we use the existing REDIMX, with all of the subscripts set to zero. For example: DIMX ARY(25,30),F ! allocate the array ... REDIMX ARY(0,0) ! deallocate (i.e. UNDIMX) it 3. --- DIMX enhancement (requires compiler 460+): arrays may now be declared as auto-expanding by adding the "AUTO_EXTEND" keyword to the end of the DIMX statement: DIMX ARY(10,30),S,25,AUTO_EXTEND The above allocates the array to the initial size of 10x30, but allows the array to expand (in the first dimension only!) during an assignment, e.g.: ARY(17,20) = "Test expansion" ! this would expand ARY to 17x30 ARY(10,45) = "Bad subscript" ! this fails (2nd dimension too big) Note: In actuality, the first statement above would expand the array to somewhat more than 17x30, to reduce the number of expansions likely when filling out an array to an unknown size. But that should be transparent. You can use the MALLOC trace to monitor the underlying memory allocation and deallocation opeations associated with arrays. Also note: DIMX, REDIMX and auto-expansion operations are all limited by the MALLOCLIMIT setting in the miame.ini (defaults to 8MB). Also note: when an array is created with DIMX, or expanded, whether by REDIMX or by the AUTO_EXTEND mechanism, the new space will all be cleared to nulls. 4. --- DIMX compiler refinement: default F and S sizes are now supported. Eg: DIMX TEST(50),F Previously, this would compile without error but generate a runtime error due to the missing size token. 5. --- XTREE enhancement: ^P now invokes the print/preview routine. 6. --- INFLD Auto-complete bug fix: Certain exitcode 30 exits were leaving the field "active", which lead to some unresponsive behaviors. ============================================================================ A-Shell Development Notes Version 5.1.1189.6 (13-Aug 2010) ============================================================================ 1. --- INFLD bug fix: When display a date using ||C, don't use the dropdown style if the |g (no date editing enhancements) code specified. Also, adjust the width of the displayed date control to fix some instances of truncation. 2. --- INFLD bug fix: Widen the timer display field (from 6 to 8 columns) to eliminate some instances of truncation when using a large font. ============================================================================ A-Shell Development Notes Version 5.1.1189.5 (12-Aug 2010) ============================================================================ 1. --- INFLD bug fix: the caret (editing position market) within combo boxes was sometimes appearing way too large. (Problem introduced in 1189.1) 2. --- INFLD auto-complete refinement: if TYPE 5 or |5 (enable down arrow exit) is specified with ||a (auto-complete), down arrow will now return exitcode 5 if the list box is not yet displayed. (Otherwise it drops directly into the list box.) ============================================================================ A-Shell Development Notes Version 5.1.1189.4 (11-Aug 2010) ============================================================================ 1. --- ATE bug fix: TAB(-10,AG_FTP) from pc-to-host was effectively ignoring the host directory if it was in the form "ersatz:" or "dsk:". (It was working ok without the ":" though.) 2. --- INFLD Auto-Complete bug fix: The ")" (start at end of field) option wasn't working reliably with self-combo (setdef="...") mode. 3. --- INFLD Auto-Complete bug fix: In some cases, the timer wasn't getting reset on exit, leading to unresponsive behavior on re-entry. ============================================================================ A-Shell Development Notes Version 5.1.1189.3 (10-Aug 2010) ============================================================================ 1. --- Compiler bug fix: The 30th ++IF directive during a compilation was causing an internal stack overflow, which was being reported as a syntax error. ============================================================================ A-Shell Development Notes Version 5.1.1189.2 (09-Aug 2010) ============================================================================ 1. --- AUI_MENU bug fix: MNUOP_CHK and MNUOP_STA were not working on popup menu items (i.e. menu items with sub-items). 2. --- AUI_MENU bug fix: MNUOP_STA was not returning system error codes for errors unanticipated by the routine (which is why the bug just mentioned went unnoticed for so long.) 3. --- MX_ERRNOMSG refinement: It is no longer necessary to convert negative system error numbers to positive before calling the routine. (System error codes are all positive, but many SBRs return them as negatives to distinguish errors from other return values, leading many people to forget to use abs() to convert them to positive before using MX_ERRNOMSG.) ============================================================================ A-Shell Development Notes Version 5.1.1189.1 (08-Aug 2010) ============================================================================ 1. --- INFLD Auto-Complete Enhancement: When combined with self-combo mode (where setdef="..."), it starts out as a combo box rather than an edit control. 2. --- INFLD Auto-Complete Bug fixes: Clean up some synchronization issues causing the edit and list controls to stop working properly together. ============================================================================ A-Shell Development Notes Version 5.1.1189.0 (07-Aug 2010) ============================================================================ 1. --- INFLD Auto-Complete Enhancement: It is now possible to use auto-complete with a coded list (||L). In this mode, when returning to the application for more data (exitcode 30 or 31), it returns the raw (descriptive) field contents (rather than the coded translation). On input, if the passed-in contents of the field cannot be translated, they will be displayed as-is. Note that you may would want to use ||s (list matching optional) with ||L, else unless you preload the list with all the valid possibilities, if the user keys in a valid entry and quickly hits ENTER, it will be rejected (until your app has a chance to first update the list based on what was typed.) 2. --- INFLD Auto-Complete refinement: When the auto-complete list is opened, it is now automatically scrolled so that the first (or closest) matching item is visible. (This is mainly a factor if you load the list with data that would sort prior to the item currently in the edit box.) 3. --- INFLD Auto-Complete refinement: fields that are covered over by the auto- complete drop-down list no longer "bleed through" into the list. 4. --- INFLD Auto-Complete refinement: the XTREE (list control) is now given the name "xtrInfldAutoComplete". This can be useful if you decide to not return to the field on one of the Auto-Complete exitcodes (30 and 31), and therefore need to delete the XTREE/list control manually, i.e. xcall INFLD, ... if exitcode = 30 or exitcode = 31 then ! (auto-complete) ! normally we would return to the field after updating the setdef, ! but if we decide not to, we must delete the XTREE control: xcall AUI, AUI_CONTROL, CTLOP_DEL, "xtrInfldAutoComplete" endif 5. --- Compiler (458) bug fix: the stack was overflowing if there were too many ++ifdef statements. 6. --- XTREE imaging refinement: the "increase by" argument to the ImgCount= option is now automatically adjusted upwards according to usage. Previously, if it was set to 1, and the actual number of images was more than the initial count parameter, it would resize one of the image-related buffers for each new image, resulting in a lot of memory trashing. 7. --- A-Shell refinement; Stack overflow testing is now more robust, allowing more stack overflow errors to be trapped before they cause a crash. ============================================================================ A-Shell Development Notes Version 5.1.1188.9 (29 Jul 2010) ============================================================================ 1. --- XTREE bug fix: in some cases you were not allowed to reduce the font scale (with Control "-") before you first increased it. 2. --- XTREE refinement: remove a bottleneck that was causing tree loading operations to take way longer than necessary (eg. 15 seconds vs 1 second). 3. --- VUE enhancement: New command MOUSEPOS {BOOL} may be used at the command level or in the ini.vue to disable caret positioning with the mouse. This may be useful on some laptops with very sensitive touchpads, which otherwise may cause the typing position to jump around unexpectedly (considered rather bad behavior in a program editor). Default is TRUE. ============================================================================ A-Shell Development Notes Version 5.1.1188.7 (29 Jul 2010) ============================================================================ 1. --- INFLD Auto-complete bug fix: now works within modeless dialogs. Previously the drop-down was causing the dialog to temporarily disappear. 2. --- XTREE image bug fix: Further cleanup of handling of descriptive text which shares a cell with an image. ============================================================================ A-Shell Development Notes Version 5.1.1188.7 (28 Jul 2010) ============================================================================ 1. --- XTREE bug fix: Close loophole in which XTREE would temporarily remove other controls even when it was in a dialog. (That should only happen for overlapping controls when XTREE is in the main window.) 2. --- XTREE image bug fix: Image cells whose text ended in a "." were sometimes being display as if a full filespec. ============================================================================ A-Shell Development Notes Version 5.1.1188.6 (23 Jul 2010) ============================================================================ 1. --- XTREE scaling refinement: Non-XTREE fonts can no longer interfere with the font reset operation. (Previously, after fonts scaled beyond about 200%, the reset operation refused to work.) 2. --- (Windows) Ashlog directory fix: the log was appearing in the users %TEMP% directory instead of the %MIAME% directory. 3. --- LOOKUP refinement: LOOKUP now reliably returns 0 for a null filespec. Previously, it was sometimes returning 0, 0.5, or even 1, depending on the version of Windows and some other mysterious factors. ============================================================================ A-Shell Development Notes Version 5.1.1188.5 (22 Jul 2010) ============================================================================ 1. --- $RESETCFG was failing to perform the implied $RESETSCALE operation. ============================================================================ A-Shell Development Notes Version 5.1.1188.4 (21 Jul 2010) ============================================================================ 1. --- XTREE scaling refinement: Changing the scale via the context menu commands $SCALE+, $SCALE- and $RESETSCALE no longer aborts cell editing mode (unless you click outside of the cell being edited, in which case it works like other context menu commands, i.e. as if you had left-clicked outside the cell. ============================================================================ A-Shell Development Notes Version 5.1.1188.3 (21 Jul 2010) ============================================================================ 1. --- XTREE scaling enhancement: New special PopupMenu commands $SCALE+ and $SCALE- now allow adjusting the scale from a context menu. (Also see $RESETSCALE under 1185 below.) 2. --- XTREE scaling enhancement: Control "+" and Control "-" (on the numeric keypad) now work within editable cells. 3. --- New virtual keycode strings defined: VK_^PLUS or VK_^ADD (same as Control "+" on the numeric keypad) VK_^MINUS or VK_^SUB (same as Control "-" on the numeric keypad) VK_^DIV (same as Control "/" on the numeric keypad) ============================================================================ A-Shell Development Notes Version 5.1.1188.2 (20 Jul 2010) ============================================================================ 1. --- XTREE scaling bug fixes: Trees with multiple custom fonts were not getting all of their fonts scaled. Shrinking the font beyond reason was leading to unreasonable results. Line heights were not always matching the height used for editable cells. 2. --- XTREE refinement: the tree was sometimes getting drawn before all of the optimization had been done. ============================================================================ A-Shell Development Notes Version 5.1.1188.1 (20 Jul 2010) ============================================================================ 1. --- XTREE scaling refinements: Further improvements(?) in the scaling performance. ============================================================================ A-Shell Development Notes Version 5.1.1188.0 (19 Jul 2010) ============================================================================ 1. --- XTREE enhancement: Add a configuration option for the XTREE default font. Option appears in the Settings > Fonts menu, and may be retrieved or updated using MX_WINSETTINGS with the new AWS_XTR_FONTFACE (21) option. Changing the XTREE (grid) default font to something specific, like Tahoma, rather than the default (which is typically MS Shell Dlg), may improve the aesthetics and scaling response in XTREE (since the default font doesn't scale very smoothly). 2. --- XTREE scaling refinement: the splitter position is now reset after a font scaling operation if the xtr'leftpanewidth was 0. ============================================================================ A-Shell Development Notes Version 5.1.1187.3 (17 Jul 2010) ============================================================================ 1. --- XTREE font scaling fix: Row height is now adjusted on initial load to avoid truncating scaled fonts, even when XTF_VARY is not set. 2. --- XTREE font scaling fix: Font scaling with Control +/- is now more "natural", eliminating a previous confusion when the incremental scale adjustment didn't actually change the effective size of a particular column font. 3. --- XTREE font scaling enhancement: Column widths are now re-optimized when you adjust the overall scale using Control +/-. ============================================================================ A-Shell Development Notes Version 5.1.1187.2 (15 Jul 2010) ============================================================================ 1. --- XTREE bug fix: Correct problems in 1185 and 1186 which resulted in a different default XTREE font size (generally smaller) then prior to 1185, when the Misc. Settings font scale was other than 0. Also, XTREE default font now matches the A-Shell default GUI font, rather than the Windows defauult GUI font (the note on 1186.5 was incorrect; this is how it was prior to 1185.) 2. --- EZTYP bug fix: The initial page status (or page status after using the Repaginate command) was showing N/N rather 1/N, which led to progressively worse mismatches between the reported position and the real position. ============================================================================ A-Shell Development Notes Version 5.1.1187.1 (15 Jul 2010) ============================================================================ 1. --- (Windows printing enhancement/fix): The printer init command PRTCOPIES now has an effect on Windows printing. By default, it is TRUE, meaning that A-Shell will generate multiple copies by sending the file multiple times to the printer driver. If explicitly set to FALSE, then A-Shell will tell the printer driver to generate the copies. Previously, if the printer selection dialog was used, then the generation of copies was left to the driver (i.e. PRTCOPIES=FALSE); else it was handled by A-Shell (PRTCOPIES=TRUE). The motivation for the change was a report that a certain printer driver wasn't generating the copies even when told to do so in the printer dialog. This fix should make that problem go away by putting copies (by default) back under control of A-Shell even when the dialog is used. Note the two main downsides to having A-Shell generate copies as opposed to the driver are: - the data has to be sent over the wire to the printer multiple times - you cannot take advantage of the collating option (if the driver offers it) But these are generally of so little import that the increased dependability of having A-Shell generate the copies is a better default choice. 2. --- (AIX) ============================================================================ A-Shell Development Notes Version 5.1.1187.0 (13 Jul 2010) ============================================================================ 1. --- (Windows) New function for sending AG commands between instances of A-Shell/Windows: XCALL MIAMEX, MX_AGINTERPROC (179), HWND, AGCMD, MSG$, STATUS Where: HWND (B4, input) is the target window handle (use MX_FINDWINDOW to get it) AGCMD (num, input) is a value in the range of 1-99 corresponding to the TAB(-10,AG_xxx) commands. (see http://www.microsabio.net/dist/doc/dev/tab10xfunctions.htm ) MSG$ (string, input) is the text string normally following the TAB(-10,AG_xxx) command (must be terminated with chr(127)!!! STATUS (signed numeric, output) returns a status code indicating the success of the operation: 1) OK (target received and processed msg) 0) No response from target -1) target received msg but rejected it as invalid -2) Missing trailing chr(127) on message -3) target HWND not found 2. --- New AG_SENDKBD (82) command to send keyboard characters (literal text, virtual function key sequences, control chararacters using ^ notation). TAB(-10,AG_SENDKBD);text;chr(127); This is mainly useful for sending key clicks to another A-Shell/Windows instance (or from a server to ATE). 3. --- Compiler enhancement (456): reserved words are now allowed for field names within a DEFSTRUCT. For example: DEFSTRUCT ST_TIMEDATE MAP2 TIME,B,4 MAP2 DATE,B,4 ENDSTRUCT Normally TIME and DATE would be disallowed since they are reserved words, but since they get appended to the structure instance name before really being used, there is no conflict here. (Change does not depend on or affect runtime environment.) 4. --- Clean up some issues internal issues with the use of XCALL/VXCALL names longer than 6 characters (see 1186). ============================================================================ A-Shell Development Notes Version 5.1.1186.7 (13 Jul 2010) ============================================================================ 1. --- ATE aux printing bug fix: If the local APEX repository directory contained a dash in its directory name, instead of printing as expected, a error dialog was displayed about failure to open a file with a cryptic filename. (Another workaround would have been to define an APEX environment variable point to a directory whose name did not contain a dash.) ============================================================================ A-Shell Development Notes Version 5.1.1186.6 (12 Jul 2010) ============================================================================ [Note: .4 and .5 were used up internally in beta testing the MX_AGINTERPROC feature to be released in 1187] 1. --- (UNIX) EZTYP bug fix: Pagination with files using LF line terminators was off by one byte, which caused page-range printing from EZTYP to be off as well. (The first page of the range was being output as a blank page.) ============================================================================ A-Shell Development Notes Version 5.1.1186.3 (01 Jul 2010) ============================================================================ 1. --- INFLD bug fix: The current value for a combo box field was not being selected if there wasn't a full-field match. (Problem introduced in 1185.1) ============================================================================ A-Shell Development Notes Version 5.1.1186.2 (30 Jun 2010) ============================================================================ 1. --- XTREE bug fix: Expansion of "%p" in TreeID was being truncated at 6 chars. ============================================================================ A-Shell Development Notes Version 5.1.1186.1 (27 Jun 2010) ============================================================================ 1. --- XTREE bug fix: "%p" in TreeID= was being expanded to % rather than just . 2. --- XTREE enhancement: Control+Shift+"/" now acts like $RESETCFG. 3. --- XTREE enhancement: sorting a column by clicking on the header now cycles between ascending, descending, and original (physical array) order. ============================================================================ A-Shell Development Notes Version 5.1.1186.0 (25 Jun 2010) ============================================================================ 1. --- VXCALL enhancement: Names up to 10 characters are now supported. (Previously, while the compiler didn't/couldn't complain, the runtime system looked at only the first 6 characters.) Note that the 10 character limit is not related to the RUN format but to the existing 10.3 framework for files loaded into USRMEM and which benefit from the emulation of the AMOS-style filesystem. When those get expanded, the VXCALL name limit will expand with them. 2. --- Compiler enhancement (edit 455): XCALL names may now be up to 10 characters long. This is accomplished by automatically converting XCALL statements with names between 7 and 10 characters long to VXCALL statements. This feature requires /X:2 and is not supported by /RC. Note the potential for a backwards compatibility problem if you start using longer names in your XCALL (or VXCALL) statements and then try to RUN the resulting RUN files on an earlier version of A-Shell, which will only be looking at the first 6 characters. (Presumably that would cause an SBX not found error, unless there happened to be an existing routine that matched the first six characters.) For this reason, you when using 7-10 character SBX names, you should avoid picking names for which an existing SBX would match the first six characters. 3. --- INFLD bug fix: When re-entering an ||L (list match) field, previously it was only considering the first 8 characters of the actual field value (after translating via the SETDEF list) when selecting the default item in the list. Thus, in a list like "~T~Materials and Components~M~Materials~C~Components~~", while "M" would internally match to the second choice (Materials), the combo box selection logic was matching "Materials" to the first item in the dropdown list ("Materials and Components"). This has now been resolved by replacing the faulty "select matching item" code within the Windows combobox routine. 4. --- XTREE font scaling enhancement (see 1185 below): Control "/" may now be used as a keyboard shortcut to reset the fonts back to the original scale factor. (Equivalent to the $RESETSCALE PopupMenu command, but doesn't require the creation of a PopupMenu.) Note that depending on the keyboard, there may be more than one "/" key, but only the one associated with the numeric pad may work for this function. 5. --- XTREE font scaling refinement: Fix a compatibility issue introduced in 1185 in which the default XTREE font changed from the default Windows font (MS Shell Dlg) to the default A-Shell GUI font. This was only an issue if the default A-Shell GUI font had been changed from its default, but if so, resulted in existing XTREEs looking different that before 1185, due to the font change. ============================================================================ A-Shell Development Notes Version 5.1.1185.0 (24 Jun 2010) ============================================================================ 1. --- XTREE enhancement: Control "+" and Control "-" (or Control+Mousewheel) now scale all the fonts in the current tree up or down by about 7%. Compatibility note: the previous function assigned to those keystrokes (expand all / collapse all) now requires Control+Shift. This scale adjustment is applied on top of any other font scaling factors associated with columns, rows, or cells. To allow easy reset back to the original scale, a new PopupMenu command $RESETSCALE has been defined. (Also, the existing $RESETCFG will reset the scale as well as the column configuration.) 2. --- XTREE enhancement: the new font scale adjustment factor may be saved and restored (along with the column configuration, etc.) by adding the flag XTUCFG_FONT (8) to the XTR'USRCFG field. 3. --- XTREE enhancement: New advanced coldef parameter DefaultFont= may be used to set the default font for the entire tree. The syntax is the same as for Font=. 4. --- XTREE enhancement: Adjustments to the column layout made to an inactive tree are now saved (provided the tree was originally display with a defined TreeID.) 5. --- Icon DLL enhancement: these DLLs will now be located in the %ATEPERMCACHE% directory if not found in the normal search path. ============================================================================ A-Shell Development Notes Version 5.1.1184.7 (22 Jun 2010) ============================================================================ 1. --- INPUT bug fix: trailing blanks were being stripped when they shouldn't be, and quotes weren't be removed in some cases where they should be. Problem was introduced around 1164 while working on INPUT CSV improvements. ============================================================================ A-Shell Development Notes Version 5.1.1184.6 (21 Jun 2010) ============================================================================ 1. --- XTREE bug fix: CellList ID codes # and * (to allow numeric or alphanumeric input in a cell within a CellList (s) column) were having the side effect of the cell being cleared whenever gaining the edit focus. ============================================================================ A-Shell Development Notes Version 5.1.1184.5 (18 Jun 2010) ============================================================================ 1. --- AUI_CONTROL bug fix: resizing image controls was causing the image to be lost when the image filespec name was > 42 characters. 2. --- EZTYP refinement: The "Default Printer" option in the brief printer menu now clears the field as soon as you type a character. ============================================================================ A-Shell Development Notes Version 5.1.1184.4 (18 Jun 2010) ============================================================================ 1. --- AUI_CONTROL bug fix: Internal changes in 1184.1 were causing Leo to fail to display nearly anything in the working dialog. ============================================================================ A-Shell Development Notes Version 5.1.1184.3 (17 Jun 2010) ============================================================================ 1. --- XTREE / XTEXT / INFLD bug fix: Caret was becoming invisible after calling XTREE or XTEXT, and not being reactivated by INFLD. 2. --- AUI_CONTROL bug fix: static icons w/o the MBF_NODISTORT flag were not getting resized/repositioned when then container dialog was resized. ============================================================================ A-Shell Development Notes Version 5.1.1184.1 (14 Jun 2010) ============================================================================ 1. --- INFLD GUI color fix/enhancement: Setting the DFCLR and/or DBCLR fields of the INFCLR structure to a palette index value +64 now overrides the theme color (provided you don't have the Settings > Misc option to "Force standard colors in edit boxes" set). ============================================================================ A-Shell Development Notes Version 5.1.1184.0 (11 Jun 2010) ============================================================================ 1. --- XTREE enhancement: icons may now be loaded into image cells (just like other BMP, TIF, PCX and JPG images). You may either specify the .ICO file (as with the other image types), or you may specify an icon resource using the resname::dllname syntax.) ============================================================================ A-Shell Development Notes Version 5.1.1183.2 (09 Jun 2010) ============================================================================ 1. --- EZTYP partial printing bug fix: the 1182.6 fix below was causing the first form feed to be stripped, even when it was not in the first position of the file. ============================================================================ A-Shell Development Notes Version 5.1.1183.1 (09 Jun 2010) ============================================================================ 1. --- ISAM-A fix: Close a loophole leading to a segmentation fault (or GPF) when a native (non-AMOS-compatible) filespec without an extension was used in an OPEN, ALLOCATE'INDEXED, or INDEXED'STATS statement. (Same as 5.0.1001.4) ============================================================================ A-Shell Development Notes Version 5.1.1183.0 (02 Jun 2010) ============================================================================ 1. --- AUI_CONTROL enhancement: AVI and BMP files may now be loaded from DLL resources (using the same syntax as for icon files, i.e. resname::dllname). ========================================================================== A-Shell Development Notes Version 5.1.1182.7 (01 Jun 2010) ========================================================================== 1. --- EZTYP partial printing bug fix: page ranges starting with the first page were actually starting with the second page. ========================================================================== A-Shell Development Notes Version 5.1.1182.6 (27 May 2010) ========================================================================== 1. --- EZTYP partial printing bug fix: for files containing hard form feeds, selecting a range of pages was resulting in an unwanted leading form feed on the first page, and typically one less page than requested. ========================================================================== A-Shell Development Notes Version 5.1.1182.5 (24 May 2010) ========================================================================== 1. --- UNIX printing bug-fix: Restore original PRTCOPIES default of FALSE (matching the documentation). It was accidentally changed to TRUE in 5.1.1147 as a side-effect of a Windows printing enhancement. ========================================================================== A-Shell Development Notes Version 5.1.1182.4 (20 May 2010) ========================================================================== 1. --- HOSTEX.SBR bug fix: Passing a "-g " clause on a "$ASHELL" command line (to launch a child session of A-Shell) was not working if the parent was launched with a "-g " switch. (It was reverting to the default acorn icon.) ========================================================================== A-Shell Development Notes Version 5.1.1182.3 (18 May 2010) ========================================================================== 1. --- EZTYP bug fix: when using the P (print) option via the EZPRTX.SBX plug-in, after returning, an additional spurious request to print the entire file was being sent. ========================================================================== A-Shell Development Notes Version 5.1.1182.2 (17 May 2010) ========================================================================== 1. --- EZ-SPOOL bug fix: accepting the default printer choice set by the application (in the XCALL SPOOL statement) in the BRIEF menu was resulting in the file being sent to the system default printer (i.e. as if you specified printer=""), rather than to the specified printer. 2. --- XTREE - Combos using the "l" cformat type were returning exitcode 30 rather than 48 on exit. (Problem introduced with the Auto-Complete feature in 1181.0) ========================================================================== A-Shell Development Notes Version 5.1.1182.1 (14 May 2010) ========================================================================== 1. --- MX_NXTCMD enhancement: new flag option can be passed to avoid updating the command file status. (In other words, non-destructive read.) xcall MIAMEX, MX_NXTCMD, CMD$, STATUS {,FLAG} If flag (numeric) is specified and evaluates to a non-zero value, then the next line of the command file (returned in CMD$) will not be removed from the current command file. 2. --- Spanish message translations in ERRMSG.SPA, LITMSG.SPA and SBRMSG.SPA have been substantially improved. (Thanks to René Villar!) ========================================================================== A-Shell Development Notes Version 5.1.1182.0 (13 May 2010) ========================================================================== 1. --- AMOS.SBR enhancement: new pflag value (+4) allows the child RUN program to pass its updated command file status to the parent. There are two main consequences. The first is that any command file inputs that were absorbed by the child program will not be available to the parent. (This is almost always preferable.) The second is that any attempt by the child program to CHAIN will effectively pass the chain information back to the parent, so that when the parent ENDS, it will then execute the chain requested by the child. (This may or may not be desirable, but it is the only way that an attempted CHAIN by the child will have any effect.) 2. --- MX_FILESTATS enhancement: two new optional arguments return the owner and group of the file. Currently this only applies to the UNIX versions, but may be supported under some Windows versions in the future. The complete syntax is now: xcall MIAMEX, MX_FILESTATS, loc'rem, path, bytes{, mtime{, ctime{, & mode{, ver{, hash{, owner{, group}}}}}}} The new parameters, owner and group, may be returned as either integers or strings. If passed as B,4 variables, the numeric value (uid and gid) will be returned. Otherwise, the string names will be returned. ========================================================================== A-Shell Development Notes Version 5.1.1181.6 (13 May 2010) ========================================================================== 1. --- DELCHR.SBR bug fix: when the string variable (2nd param) had no trailing null, the byte following the end of the variable in memory was being set to zero. 2. --- XTREE refinement: date sorting now determines date order from Format= clause (see 1163.1 below) if available. Otherwise it uses the LDF (as it does now). ========================================================================== A-Shell Development Notes Version 5.1.1181.5 (06 May 2010) ========================================================================== 1. --- INFLD auto-complete enhancement: it is now possible to change the width of the list box to be something other than the same width of the edit field. This can be useful when you want to show more information (i.e. more columns). To accomplish this, insert a prefix at the start of the the SETDEF parameter of the form [widthspec], where widthspec may be: +### increase list width by ### columns -### increase list width by ### columns (but start ### columns to the left of the field) ### set width to ### columns (starting in the same column as field) For example: SETDEF = "[+4]1~10~x~S~~11~4~x~S~~~" + ITEMLIST$ The above SETDEF defines 2 columns (1-10 and 11-14), and adds 4 to the list width (so it is 4 columns wider than the field, which is presumably 10 columns wide to match the first column of the list.) 2. --- INFLD auto-complete refinement: when there are multiple columns in the list, the first display column is always the one associated with the field. (Previously, this was mostly true, but it was possible to set another column to be the active column by clicking on it.) 3. --- INFLD auto-complete enhancement: you may now require that the entry match one of the items in the current list, by adding the TYPE code ||S. Previously, and otherwise, list matching was/is not enforced. Note that unlike the case where ||S is used with a combo box, the field still operates like a normal editable field (otherwise the point of auto-complete would be lost). Also note that when using ||S, it is critically important that the SETDEF list items are formatted so that each item width (or at least the first column-equivalent of each item) matches the field width according to MAXCHARS. ========================================================================== A-Shell Development Notes Version 5.1.1181.4 (06 May 2010) ========================================================================== 1. --- Compiler bug fix: memory corruption was occurring (generally causing a nasty crash of A-Shell) when the size of a DEFSTRUCT exceeded 4K. 2. --- ISAM 1.1 bug fix: use of the or /B:#### switch in ISMBLD (to use non-standard IDX block sizes) was leading to a crash under big-endian machines (like AIX), due to a byte swap mixup in the block size field of the ISAM rock. ========================================================================== A-Shell Development Notes Version 5.1.1181.3 (05 May 2010) ========================================================================== 1. --- ATE / XTREE bug fix: 1181.2 introduced a change that was causing ATE to crash intermittently when invoking XTREE. ========================================================================== A-Shell Development Notes Version 5.1.1181.2 (03 May 2010) ========================================================================== 1. --- //IMAGE enhancement: A new flag and optional second filespec parameter have been added to allow more flexibility in handling the case where the specified image is not present. Normally in such a case, the text of the //IMAGE command will be printed at the current "cursor" location on the page. If you would rather have nothing printed, then you can specify the new flag IMGF_OPTIONAL (&h020). You may also specify a second image filespec, which, if the first image is not present, will be printed instead. Either or both of these can be useful in cases where the image file name is derived from some other data (such as a part number), but is not always present (i.e. not every part has an associated image). Rather than the application having to check individually for the presence of each one, the //IMAGE command can now do the work for you. Complete new syntax: //IMAGE,imagespec,left,top,right,bottom{,flags,borderwidth,imagespec2} Note that the IMGF_OPTIONAL value can also be expressed as the text "OPTIONAL", e.g.: //IMAGE,p123.jpg,100,100,200,200,OPTIONAL,1,generic.jpg In the above example, if p123.jpg is present, it will be printed. If not, and generic.jpg is present, it will be printed. If neither is present, nothing will be displayed (including no border), and there will be no indication of an error. 2. --- A-Shell/Windows/ATE bug fix: after using the File > Load or > Save As menu options, the current internal A-Shell directory might have been changed, causing problems for subsequent operations which rely on the internal current directory context. 3. --- Auto-complete (see 1181.0) bug fix: in some cases, controls which were covered by the drop-down list box would disappear when the drop-down list box was removed. 4. --- Auto-complete refinement: list will now appear above the edit field (instead of below) if the edit field is too close to the bottom of the parent window. Note, however, that in terms of the up/down arrow keys used to navigate between the list and the edit box, the list will always behave as if it were below the edit box. In other words, to go from the edit box to the list, use down arrow. And to tell the app to display a continuation of the list, use down arrow (or Control+down arrow) from the last item in the list. 5. --- Auto-complete enhancement: The COLDEF portion of the SETDEF string may now contain more than one XTREE column definition, provided that the primary column (the one that corresponds to the edit field) is the first real column, and that the list items in the SETDEF list conform to the COLDEF. As an example, to give some items in the list a special background color, you might define a second column to contain the color code, plus a pseudo-column to define the RGBbg value: SETDEF = "0~0~x~H~RGBbg=220,230,240,A~~1~10~x~S~~11~1~x~cH~~~" & + ",Apples A,Bananas ,Peaches A,Watermelon ,," In the above list, we defined an RGBbg value assocated with a pseudo-column, then defined 2 real columns - the first ten characters long (the primary column) and the last one character to contain the color code. The list then specifies the color code "A" for Apples and Peaches, so those two items would appear in the auto-complete list with the specified background color. Note that each item in the list (as measured by the space between the delimiters) must match the total length of all the real columns (11 in this example). 6. --- Auto-complete refinements: Several other minor technical and user interface issues were cleaned up. ========================================================================== A-Shell Development Notes Version 5.1.1181.1 (29 April 2010) ========================================================================== 1. --- XTREE refinement: Combo boxes (cell editing) now grow to fill the row height, if necessary. Previously, the row height would be increased if necessary to match the natural combo box height (if the natural combo height was more than the row height), but not the other way around. It doesn't change the fundamental operation, but now looks better. ========================================================================== A-Shell Development Notes Version 5.1.1181.0 (28 April 2010) ========================================================================== 1. --- New INFLD GUI Feature: Auto-complete. The concept here is whenever there is a pause in the user's typing (currently 0.5 secs), INFLD exits back to the application with exitcode 30, allowing the application to create a list of possible ways to complete the field based on the characters already entered, and pass this list back to INFLD. INFLD then displays a small list box below the field with the specified choices. The user can down-arrow or click into the list box to select any of the items. The user can also return to the field by hitting left or right arrow, or by typing a character or the BACKSPACE key. To activate auto-complete mode, add the following TYPE codes: "||a)|]" "||a" activates auto-complete mode, but in order for the re-entry process to work as expected, the ")" (re-enter at end of field) and "|]" (don't pad or strip trailing spaces) are strongly recommended. On re-entry after INFLD exits with exitcode 30, SETDEF should be formatted as follows: ~ is a standard SETDEF list of allowable options, except that each entry must be the same length. (Use space padding as needed to achieve this.) Note that it doesn't make much sense for the length of the entries to exceed the MAXCHARS value for the field. is an XTREE-style column definition string, which defines just one column, typically using cformat S (for string), and whose width matches the width of the items in the . (The column title is ignored.) Theoretically you can also use any of the cformat or XTREE Advanced Coldef Options that made sense for the selection list, but none are typically needed. For example: SETDEF = "1~7 ~S~~~,ACME ,Adams ,Affleck,Azure ,," The above SETDEF string illustrates a possible response to the user entering "A" and then waiting 0.5 seconds (or hitting the down-arrow) to display the auto-complete list. It starts with a coldef indicating 7 character string entries, followed by a set-list containing such items. Note the three tildes (~~~) separating the two strings (two are part of the coldef string, and one more to separate the coldef and set-list strings). Also note the trailing spaces on the list elements to give them each 7 characters. Limitations and comments: - Auto-complete can only be used with "simple" edit fields (no combo boxes, radio buttons, checkboxes, date pickers, spinners, multi-line mode, or forms). - The list containing the options will occupy a maximum of about 5 "grid rows" BELOW the INFLD control. If the INFLD control is too close to the bottom of the screen, the height of the list will be truncated. (There is currently no support for the list appearing above the field.) - Internally, the list control is assigned exitcode -63 (VK_xF63). You should not have any controls in that range (-33 to -99 is generally reserved for A-Shell.) - When INFLD exits with exitcode 30 (asking the app to refresh the list data), you must re-enter with a proper SETDEF string (as described above). Failure to re-enter will leave the list on the screen (unless you manually delete it by some other means, such as TAB(-1,0) or destroying the parent dialog.) Re-entering with an empty or invalid SETDEF will generate undefined results. - Obviously, you want to minimize the time the application takes to respond to exitcode 30. Characters typed during that interval should be queued up but won't appear until the application returns to INFLD. - There is no particular limit to how many items can be in the list, but as a matter of practicality or efficiency, you should keep it reasonably short. (For example, if the user enters "A" and pauses, you may not necessary want to generate a list with all of the items that start with "A".) The user can effectively request more items by pressing Control+down arrow from the bottom of the list. (See next comment for more details.) - Requesting more items: If the user wants to see more items in the list, she can either type some more characters (effectively refreshing and narrowing the choices), or she can press Control+down-arrow from the last item in the list, which generates exitcode 31. Applications can respond to exitcode 31 by either building a longer list, or by replacing the current list with the next several items in sequence. Note that if you don't want to require the Control key for this purpose, add the advanced coldef option ScrollMode=Tree. See the SOSLIB sample program INFAC1.BP for a simple working example. 2. --- COPY.LIT and MOVE.LIT 3.2(131) new switches: /MINDAYS:### (Ignore files changed within last ### days) /MINSECS:### (Ignore files changed within last ### seconds) /? (Display syntax and switch info) Note; COPY.LIT and MOVE.LIT are identical. Their behavior changes based on the name of the module. The /MINDAYS and /MINSECS switches are also supported by ERASE.LIT ========================================================================== A-Shell Development Notes Version 5.1.1180.0 (20 April 2010) ========================================================================== 1. --- TCPX.SBR enhancement: STARTTLS protocol now supported via a new opcode and flag (in ashell.def): define TCPOP_STARTTLS = 12 ! TCPX opcode to initiate STARTTLS define TCPXFLG_STARTTLS = &h00200000 ! Use with TCPOP_CONNECT Limitations: As with TLS connections (introduced in 1179.0), currently only client connections (TCPOP_CONNECT) are supported. Also, the TIMER option seems to interfere with the TLS handshaking. If having problems, turn that off and just use blocking mode, in conjunction with TCPOP_CHECK to check for data. To initiate a STARTTLS connection, use the TCPOP_CONNECT opcode, along with the TCPXFLG_TLS and TCPXFLG_STARTTLS flags to initiate the unencrypted connection. When you want to start the TLS negotiation, use whatever unencrypted means are required to inform the server that you are about to start negotiating TLS, and then call TCPX.SBR with opcode TCPOP_STARTTLS. After the successful return (STATUS=0), you will be in encrypted mode, and the TCPXFLG_STARTTLS flag will no longer be needed. (However, as mentioned in the 1179 notes, TCPXFLG_TLS is required with EVERY call to TCPX.SBR if you are using TLS or STARTTLS protocol, including those calls prior to using TCPOP_STARTTLS.) Note: EMAILX.SBR 5.1(121) uses this new feature to support the STARTTLS protocol extension to SMTP, permitting, for example, the use of the GMAIL SMTP server. See the notes below under 1179 for further details about the TLS extensions to TCPX.SBR. Linux installation requirements: - Standard installation of the GnuTLS package, preferably version 2.8.6 (from www.gnu.org). - Copy the latest libashtls.so.1.0.xxx (xxx currently at 204) into the $MIAME/bin directory (where the ashell executable is). - Create /usr/lib/libashtls.so.1 as a symbolic link to the libashtls library in the $MIAME/bin directory, e.g.: # ln -s $MIAME/bin/libashtls.so.1.0.204 /usr/lib/libashtls.so.1 Windows installation requirements: - Download http://www.microsabio.net/dist/other/gnutls/gnutls-2.8.6.zip and unzip the contents into the bin directory (where ashw32.exe is). - Download http://www.microsabio.net/dist/51dev/bin-win/libashtls-204.zip and unzip the contents (libashtls.zip) into that same bin directory. Debugging notes: Use the "SOCKS" trace option (SET TRACE SOCKS ON) to record many details about the operation of the TLS library. For even more detail (particularly about the handshaking process), also set the XDEBUG trace option. ========================================================================== A-Shell Development Notes Version 5.1.1179.4 (16 April 2010) ========================================================================== 1. --- APEX refinement: Continuation of 1179.3, which didn't handle the case where APEX was not forcing the application to wait. ========================================================================== A-Shell Development Notes Version 5.1.1179.3 (16 April 2010) ========================================================================== 1. --- APEX refinement: the COPIES parameter passed to SPOOL/EZSPL is now used to set the default in the printer dialog. (Previously APEX effectively set the copies back to 1.) ========================================================================== A-Shell Development Notes Version 5.1.1179.2 (14 April 2010) ========================================================================== 1. --- Windows printing bug-fix: close a memory leak which was causing memory handles to be used up during printing. (After a couple of dozen printing operations, it would run out of memory handles.) ========================================================================== A-Shell Development Notes Version 5.1.1179.0 (12 April 2010) ========================================================================== 1. --- TCPX.SBR enhancement - introduce preliminary support for TLS/SSL via the new flag TCXPXFLG_TLS (&h00100000). There are several notes and caveats to consider: - You must pass the TCPXFLG_TLS flag with every call to TCPX.SBR. This will probably necessitate that the flags parameter be mapped as B,4. Note that the flag is above the range normally used for the transfer size for TCPOP_READ and TCPOP_WRITE (where flags may be used to specify the number of bytes to transfer). - The multitude of variations and parameters relating to secure connections (ciphers, protocols, certificate types, algorithms, etc.) are currently all defaulted to a "standard set". Future releases will elaborate on this. - Passing the TCPXFLG_TLS option to TCPX.SBR will cause the LIBASHTLS.DLL module to be loaded, along with several other DLL's which are part of the GnuTLS package. Currently these are all released together in a zip which should be unpacked into the %MIAME%\bin directory. - See the sample program SOAP1.BP for an example of using the TLS feature to submit a SOAP request to a secure web server. ========================================================================== A-Shell Development Notes Version 5.1.1178.1 (10 April 2010) ========================================================================== 1. --- Dynamic memory bug fix: An in-process XCALL AMOS invoked from within a function or procedure was freeing dynamic memory that may still have been in use by the calling program, leading to a spurious error 3 (out of memory). The error was also logged in ashlog.log as "Attempt to reference expired dynamic memory", but "A" at the start of the message was being replaced by garbage due to an error in the message format spec. 2. --- Clipboard bug fix: Accented characters copied from A-Shell were sometimes failing to paste properly into Unicode apps, depending on whether A-Shell was in ANSI or OEM character set mode. ========================================================================== A-Shell Development Notes Version 5.1.1178.0 (06 April 2010) ========================================================================== 1. --- AUI_CONTROL enhancement: new cstate flag MBST_NORMALIZE (&h10000000) may be used with CTLOP_CHG to change the state of a minimized or maximized window back to normal. Also, MBST_MINIMIZE now works with CTLOP_CHG. (Previously it only worked with CTLOP_ADD.) ========================================================================== A-Shell Development Notes Version 5.1.1177.9 (05 April 2010) ========================================================================== 1. --- TCPX enhancement: You may now set the SO_LINGER socket option to "on" by passing the flag TCPXFLAG_LINGER (&h0100) and then putting the desired linger time (in seconds) into the 4th (high byte of B,4) byte of FLAGS during a TCPOP_CONNECT or TCPOP_ACCEPT call. For example: TCPOP = TCPOP_CONNECT ! (or TCPOP_ACCEPT) FLAGS = FLAGS or TCPXFLAG_LINGER ! activate SO_LINGER option FLAGS = FLAGS + (5 * (2 ** 24)) ! set timer to 5 seconds The SO_LINGER option affects the behavior of the TCPOP_CLOSE operation, relative to data that has been sent but may not yet have been delivered. There are three possibilities: By default, the SO_LINGER option is turned off, which means that the close operation returns immediately, but if there is any data still remaining in the socket send buffer, the system will try to deliver it to the remote end. If SO_LINGER is turned on, and the timer value is 0, then the connection will be aborted when TCPOP_CLOSE is called. Any data still remaining in the socket send buffer will be discarded, and a reset packet (RST) will be sent to the remote end, rather than the normal termination sequence. If SO_LINGER is turned on, and the timer value is non-zero, then the kernel will "linger" when the socket is closed either all of the data in the send buffer has been sent and acknowledged by the remote end, or the timer expires. If the socket is blocking, TCPOP_CLOSE will not return until one of those conditions is met. (If non-blocking, it will return, possibly with STATUS set to EWOULDBLOCK, but the kernel will still linger as just described.) Note that the SO_LINGER timer should not be confused with the TCPX.SBR TIMER parameter, which relates to the time until the connection is made or accepted. 2. --- GUI bug fix: Certain kinds of image filespecs (particularly those already in native format) were getting corrupted before being processed, leading to a failure to load the image (e.g. icon or bitmap) associated with some controls. (Problem was introduced in edit 1176.) 3. --- ABOUT.LIT 2.2(108) now displays license options for the auxiliary ATE license. Also, when the ATE client is supplying its own license even though the server offers server-based licensing, a warning message now displays at the end of the ABOUT display. ========================================================================== A-Shell Development Notes Version 5.1.1177.8 (02 April 2010) ========================================================================== 1. --- XCALL HOSTEX bug fix (UNIX only): Passing the STDOUT$ argument was causing the STS argument to always return 0. ========================================================================== A-Shell Development Notes Version 5.1.1177.7 (31 March 2010) ========================================================================== 1. --- File hook bug fix: The "refinement" in 1177.6 essentially broke all detection of changes in the WRITE hooks. ========================================================================== A-Shell Development Notes Version 5.1.1177.6 (30 March 2010) ========================================================================== 1. --- MX_COMPIL enhancement: new STATUS parameter returns 0 for success (else error), making it easier to detect if the compil succeeded. Complete syntax is now: xcall MIAMEX, MX_COMPIL, filename, switches {,defbuf, vcpattern, status} filename [s,in] is the filespec of the source program to compile switches [num,in] is a bitmap of switch values. Note recently defined bits: &h00200000 ! /C:sym=value &h00400000 ! /IEEE &h00800000 ! /VC:pattern &h01000000 ! /LI defbuf [s,in] contains one or more symbol=value pairs (from /C:sym=value switches), separated by chr(10). vcpattern [s,in] contains the pattern specified in /VC:pattern status [num,out] returns 0 if the compil succeeds, else failure. 2. --- Compiler bug fix (edit 453): Correct a problem with patch 449 (see 1177.1) which caused spurious syntax errors to be reported in valid ISAM-A statements containing ISAM'KEY(x). 3. --- Compiler minor fix: Certain errors were causing spurious syntax errors to be reported on the subsequent line. (This didn't change the fact that the program had errors and thus would not compile, but did confuse things by making it look worse than it was.) 3. --- Compiler minor fix: The %v component of a pattern specified with /VC:pattern (see 1177.2) was getting translated to "" rather than "0" when the file contained no PROGRAM or VEDIT statement. 4. --- COMPIL.LIT / COMPLP.LIT / OCMPIL.LIT 1.1(123) update: /VC:pattern now supported. 5. --- File hook refinement: The PRE'REC data buffer is now refreshed by WRITE operations as well as READ operations. ========================================================================== A-Shell Development Notes Version 5.1.1177.5 (29 March 2010) ========================================================================== 1. --- Improved compatibility with Asian language configurations. (Extension of 1175.4 improvement.) Now chr(63) is accepted as a substitute for chr(250) or chr(255) is the VK_xxx virtual key encoding sequence. ========================================================================== A-Shell Development Notes Version 5.1.1177.4 (26 March 2010) ========================================================================== 1. --- XTREE fix to SelChgExit=### feature: The tree was sometimes exiting immediately on entry (because the "selection change" message was firing as a result of internal positioning of the selection bar.) It now waits for the selection to change as the result of a user action. 2. --- XTREE enhancement to SelChgExit=### feature: When the selection is changed by keyboard action, the exit is delayed (1/3 second by default). This eliminates the situation where the user wants to jump from, say, row 5 to 10, but instead of clicking on row 10, they use the down arrow to scroll down. Previously, this would have exited on row 6, which was generally wasn't desirable. You can change the default delay by adding it to the end of the SelChgExit clause, separated by a comma: SelChgExit=exitcode{,delay}~~~ Where exitcode is the numeric value of the exitcode to be generated on change of selection, and delay is the desired delay in milliseconds (default 333 milliseconds). There is no delay when the selection is changed by clicking. In the case of changing the selection via the keyboard search feature, the delay is increased by 1 second to allow the operator to more easily type the necessary characters to identify the desired item to be selected. ========================================================================== A-Shell Development Notes Version 5.1.1177.3 (25 March 2010) ========================================================================== 1. --- Compiler enhancement (edit 452) : To assist those want to use /M to identify any unmapped variables as errors (highly recommended to avoid bugs caused by mistyped variable names which are then auto-mapped if you don't use /M), actual map statements for the auto-mapped variables will now be appended to the bottom of the LSX file (generated with /LF). These auto-generated map statements may then be reviewed and copied back into the original program, so that it may be compiled with /M. Obviously, if you perform this operation blindly, it doesn't buy you much since all of your misspelled and implicitly mapped variables will now simply become explicitly mapped. But the theory is that it will make it easier for you to review the auto-mapped variables for potential errors, perhaps by sorting them to locate variations of the same variable, or by looking them up in the original program to see whether the usage is valid. And from that point on, the ability to use /M will certainly save you time tracking down bugs in new development caused by typos in new variable names. If you tend to use the same common (and unmapped) variable names in many programs, you may want to move the generated map statements into a common ++INCLUDE module. Note: in the case of implicitly mapped array variables, the array size in the LSX file will be left empty, leading to a compiler error if you try to compile without editing the MAP statement to specify the array size. This was a deliberate decision to force you to review such variables, since depending on the compiler's implicit rules for unmapped arrays seems like a particularly cordial invitation to chaos. ========================================================================== A-Shell Development Notes Version 5.1.1177.2 (24 March 2010) ========================================================================== 1. --- New compiler switch (edit 450): /VC:pattern (VC stands for "Version Copy") When specified, the compiler makes a backup copy of every source module encountered (the main program and any ++include files) according to the pattern. The idea is to provide a simple way to archive source code, which is sensitive to program versions. The pattern is made up of literal characters, plus any of the following: %d = directory of the original file (e.g. c:\vm\miame\dsk0\150100\) %f = filename of the original file, minus extension (e.g. myprog) %e = extension of the original file (e.g. bas) %v = vedit value of the file. For the main file, this comes from the program statement, e.g. "PROGRAM name,M.ms(eee)" where M=VMAJOR, m=VMINOR, s=VSUB and ###=VEDIT. For included files, it comes from a comment found anywhere in the file, having the following form: !VEDIT = ### Spaces around the "=" are optional, and the ### may be 1-5 digits long. Following the last digit, to the remainder of the line, no characters are allowed except spaces and "!". (These restrictions are to avoid confusing an occurrence of "VEDIT" in, say, an assignment statement, with a declaration of the version number of the source file.) Note that VUE uses the same rules to identify the VEDIT statement, used in two special commands related to using the VEDIT value: ^_E increments the VEDIT value and inserts a partially filled in dated edit history line at the cursor location ^SE inserts a "[###]" at the cursor location (### = the current VEDIT value) If no VEDIT value is defined for the current file, it is treated as 0. For example, consider an original program file (after conversion to local syntax) of c:\vm\miame\dsk0\909060\sqltest4.bp : /vc:%d%f-%v.%e ==> c:\vm\miame\dsk0\909060\sqltest4-104.bp /vc:c:\backup\%f.%e ==> c:\backup\sqltest4.bp /vc:%dalpha-%v-%f.bak ==> c:\vm\miame\dsk0\909060\alpha-104-sqltlest4.bak The pattern may also be quoted, which is necessary in order for it to contain spaces or slashes, i.e., under UNIX we might have: /vc:"%dback up/%f.%e" ==> /vm/miame/dsk0/909060/back up/sqltest4.bp Without the quotes, the pattern will be terminated at the first space or forward slash. Note that if the %d (directory) directive is omitted from the pattern, the copied file will be placed in the current directory. (This would be one easy way to get all of the ++included modules used by a program into one directory. See the /LI switch below for a related feature.) 2. --- New compiler switch (edit 451): /LI (for Local Include) When specified, the directory information on any ++INCLUDE statement is ignored (the file is loaded from the current directory). This might be useful in situations where, for reasons of portability or archival, you might consolidate all of the ++include modules associated with a single program into a single directory. Compiling with /LI would then eliminate the need to edit all of the ++INCLUDE statements to remove the directory specifications. For example, you might use the switch /VC:c:\archive\%f.%e to make a copy of all the source modules associated with a program into the directory c:\archive. To compile to copy made in that directory, you could then log into that directory and use the /LI switch. Note that a related feature is always activated: when the compiler is unable to locate the specified ++include file in the specified directory, or in the BAS: account, it will look in the location where the main source file was loaded from. (In comparison, the /LI switch ignores the specified and BAS: locations and only looks in the current directory.) Note that when using the compil.exe version of the compiler, if you are compiling from a difference directory than where the source files are, you may need to specify the -l switch in order to establish the current directory context from which the -li switch will be processed. ========================================================================== A-Shell Development Notes Version 5.1.1177.1 (23 March 2010) ========================================================================== 1. --- Compiler refinement (edit 449): The non-subscripted variable name ISAM'KEY is now allowed when compiling with /X:2. (In other words, it is no longer confused with the subscripted keyword ISAM'KEY(x) which is used in ISAM'PLUS FIND and GET statements.) ========================================================================== A-Shell Development Notes Version 5.1.1177.0 (23 March 2010) ========================================================================== 1. --- PolyShell / ATE refinement: XCALL MESAG now automatically reverts to text mode when running under PolyShell, even when the terminal supports GUI. (The GUI message box interferes with the ability to swap to a new job, which is a common urge when faced with a strange error or warning message.) 2. --- ATE / MESAG.SBR refinement: The ATE protocol sequence which launches a GUI-mode message box in response to XCALL MESAG has now been made more robust by enclosing it in an ATE transaction wrapper. Previously, it was too easy to mess up the sequence by typing ahead. ========================================================================== A-Shell Development Notes Version 5.1.1176.9 (19 March 2010) ========================================================================== 1. --- ISAM 1.x auto-expansion bug fix: Auto-expanded indexes were reporting the wrong number of total and available IDX blocks in information utilities such as ISMROK.SBR and ISMPAR.SBX. The problem was confined to some information-only fields in the IDX and didn't affect ISAM operations on the file. Typically it was not apparent in ISMDMP because is doesn't report the total number of IDX blocks. (It probably went so long without detection because auto-expansion made the issue somewhat moot.) 2. --- XTREE date picker refinement: Entering a single digit into the MM or DD sub-field and hitting an exit key now updates the field before exiting. Previously, the exit key took precedence, causing the value of the date prior to updating the last subfield to be the returned value. 3. --- XTREE date picker bug fix: The style of the date picker was being interfered with by certain other cformat flags (such as centering). For example, instead of a drop-down button for displaying the date picker calendar, you may have ended up with an up/down control instead. 4. --- XTREE date picker enhancement: You may now pass the following Date Picker calendar style flags by appending the decimal representation of the sum of the desired flags to the end of the Format= string (following a "|" delimiter). (The symbols are defined in ashell.def, and are shared with the Month Calendar standalone control): MCS_WEEKNUMBERS (4) The month calendar displays week numbers (1-52) to the left of each row of days. MCS_NOTODAYCIRCLE (8) The month calendar does not circle today's date. MCS_NOTODAY (16) The month calendar does not display today's date at the bottom of the control. MCS_NOTRAILINGDATES (64) (Vista+) Dates from the previous and next months are not displayed in the current month's calendar MCS_SHORTDAYSOFWEEK (128) (Vista+) Short day names are displayed in the header For example: Coldef$ = "1~8~Trx Date~DE~Format="MM/dd/yy|84~~" The above Coldef$ defines an editable date column using MM/dd/yy format and with the MCS_WEEKNUMBERS, MCS_NOTODAY, and MCS_NOTRAILINGDATES calendar style options. ========================================================================== A-Shell Development Notes Version 5.1.1176.8 (18 March 2010) ========================================================================== 1. --- XCALL SERCH enhancement: indexes using span'blocks (including record sizes up to 2048). Previously it only supported record sizes up to 512 with traditional blocking. 2. --- Terminal emulation refinement (UNIX?) - TAB(-1,0) now resets the alternate character set mode as well as clearing the screen. ========================================================================== A-Shell Development Notes Version 5.1.1176.7 (16 March 2010) ========================================================================== 1. --- EZSPL bug fix: the BRIEF menu mode had some formatting problems, particularly for non-English languages, and it failed to properly save and restore the screen. ========================================================================== A-Shell Development Notes Version 5.1.1176.6 (15 March 2010) ========================================================================== 1. --- XTREE refinement: XTF2_AUTOEXPCOL no longer automatically overrides the wrap option in the last column. If any columns have the wrap attribute, it assumes that there will be a vertical scroll bar and calculates the column width expansion accordingly, leaving the wrap settings in place. (The only downside of this change is that if there are not enough items to require a vertical scroll bar, you could end up with a vertical white strip on the right edge, where the vertical scroll bar would have gone.) ========================================================================== A-Shell Development Notes Version 5.1.1176.5 (12 March 2010) ========================================================================== 1. --- XTREE refinement: ExitChars (extended column format option) now work in all kinds of editable cells. (Previously only checkboxes and radiobuttons.) ========================================================================== A-Shell Development Notes Version 5.1.1176.4 (11 March 2010) ========================================================================== 1. --- ATSD refinement: add support for missing TCRTs 106-117 (reverse, underline combinations with no space) for VTxxx clients. (One place where this was really needed was in PCKLST, where you need reverse to see the selected item.) Also, support VT100-style arrow keys. ========================================================================== A-Shell Development Notes Version 5.1.1176.3 (08 March 2010) ========================================================================== 1. --- ISAM 1.1 bug fix: Close a loophole in which a key deletion in an index with odd-length keys might generate a bogus ERF 35. ========================================================================== A-Shell Development Notes Version 5.1.1176.2 (08 March 2010) ========================================================================== 1. --- ATE / PolyShell enhancement: The server now sends its POLYKEY and SWAPKEY definitions to the client during the handshake, so that ATE can automatically release any keyboard hold when the key is used. (This solves the problem of the swap key being ignored during certain server / application states, like sleeping.) If a 1176.2+ ATE connects to an older server (which does not pass the information), the newer ATE will use the SWAPKEY and POLYKEY values from its own miame.ini, and if not defined there, will use as default "`" (grave) and "~" (tilde). 2. --- ASHUPD.LIT 1.0(133) now recognizes program versions when deciding whether an update is needed. Also, an issue with failing to detect the proper platform variation was fixed. Also, an issue with "unrecognized dates" caused by a mismatch between the LDF and OS locale date formatting was fixed. Unfortunately, as the prior version relied on file dates to determine whether to update, if you recently copied or installed an older ASHUPD.LIT, it may fail to detect the need to update itself (in which case you'll need to manually update it.) ========================================================================== A-Shell Development Notes Version 5.1.1176.1 (04 March 2010) ========================================================================== 1. --- Fix session file fspec glitch introduced in 1176.0 (symptom was message saying it couldn't load c:\vm\miamedefault.ash or something like that.) 2. --- MX_TELSER enhancements: Passing 0 for the port value now closes/releases any socket resources opened by a prior MX_TELSER call. This allows the operaton to be cleaned up and restarted. Also, when the client disconnects, the server job now reliably receives error 250. (Previously it may have only gotten a ^C signal.) ========================================================================== A-Shell Development Notes Version 5.1.1176.0 (02 March 2010) ========================================================================== 1. --- A-Shell/Windows/ATE command line enhancement: the application icon can now be specified as a file, using the syntax: -g fspec.ico The file must be either in the PATH (which will aways include the directory where the ashw32.exe is loaded from), or in a subdirectory "icons" below the %MIAME% directory (as determined by a predefined MIAME environment variable or the location of the miame.ini). This eliminates nearly all of the need to embed application icons into the ashw32.exe, so we have removed them. Temporarily, we will include in the standard release copies of all of the icons previous embedded, so no particular action is required. However, at some point in the near future, we will probably drop them as well, and leave it to individual developers to add their own custom icon(s) to the package. The one problem which can be foreseen is that desktop shortcuts which now use an icon embedded within the ashw32.exe will be subject to having their icon reset if Windows (or the user) decides to update the shortcut. In that case, you'll need to just use the "Browse" button in the shortcut properties to browse the %MIAME%\icons directory to locate the standalone copy of the desired icon. To prevent that from happening, you can reset the application icon using MX_SHORTCUT, so that it points to the new discrete copy of the ico file. Hopefully, all will agree that this is a relatively minor inconvenience compared to the benefits of decoupling custom icons from the executable. Note: because of the need for the standalone ico file to exist in order for a custom icon to work within A-Shell, this update is best done by running the full install package (rather than just updating the ashw32.exe). 2. --- Text transparency bug fix: a bug introduced in 1175.5 was having the symtom of some GUI text appearing as solid rectangles. 3. --- AUI_CONTROL enhancement: CMF2_PIXSIZE now works with dialogs. Note that in such as case, the MBF_ALTPOS flag causes the dialog client area to be sized to match the erow and ecol parameters in pixels. Otherwise, the erow and ecol values are used to determine the overall dialog size. ========================================================================== A-Shell Development Notes Version 5.1.1175.7 (23 February 2010) ========================================================================== 1. --- STATIC variable initialization bug: programs and subroutines (RUN/LIT/SBX) using 5.1 extensions (with RUN header 0xF1F6 or 0xF176, generally due to the use of dynamic variables) were not reinitializing the STATIC variables when the program was loaded via XCALL AMOS or XCALL (SBX) and then called a second time. 2. --- Max length of passwords encrypted with MX_PWCRYPT increased from 24 to 128. ========================================================================== A-Shell Development Notes Version 5.1.1175.6 (22 February 2010) ========================================================================== 1. --- XTREE bug fix: sorting of date columns that include a time as well as a date was not properly handling the time when the date contained CCYY instead of just YY. 2. --- XTREE bug fix: the click position on an inactive tree was not properly overriding the xtr'targetrow value when that tree became active. ========================================================================== A-Shell Development Notes Version 5.1.1175.5 (21 February 2010) ========================================================================== 1. --- GUI enhancement: MBF_AUTOGROW is now compatible with MBF_RTJUST. Control is anchored on the right side by the ecol value, and then grows to the left as needed to fit the text. 2. --- GUI refinement: MBF_AUTOGROW now allows a few extra pixels on the right for left-justified controls using italics (otherwise the upper right corner of the last character was getting truncated due to the italic overhang.) 3. --- GUI fix: MBF_DIM was not working as advertised with MBF_STATIC+MBF_FRAME. 4. --- MX_DEFTABXYZ (for defining 3D tab effects) enhancements: New ptype codes: T[ like TL but shrinks control to just fit the text T] like T[ but right justified D[ like DL but shrinks control to just fit the text D] like DR but right justified Also, RGB values are now supported in the fgc and bgc parameters. (Previously only palette codes and -1 and -2 were allowed.) 5. --- READ statement (for reading DATA) now supports &h (hex) and &o (octal) values. 6. --- GDI printing bugfix: The landscape switch (32768), when passed to XCALL SPOOL or EZSPL, was not overriding an ORIENTATION=PORTRAIT statement in the printer init file. 7. --- XTREE accessibility refinement: A left click anywhere within a checkbox or radiobutton CELL is now treated as equivalent to a click right on the checkbox or radiobutton bulls eye. 8. --- GUI text transparency refinement: Text controls (created with BGC = -2) now assume the background color of underlying colored regions (such as MBF_FRAME and other MBF_STATIC controls), not just dialogs and the main window background. 9. --- More improved compatibility with non-English language configurations. Font selection now reverts to requesting the default character set if the requested font face cannot be selected using the previously set character set (i.e. OEM or ANSI). This solves a problem in which fonts selected from the font dialog wouldn't "stick". ========================================================================== A-Shell Development Notes Version 5.1.1175.4 (19 February 2010) ========================================================================== 1. --- Improved compatibility with Asian language configurations. When Windows is configured to support some Asian languages, the chr(250) used in the virtual function code sequence may get re-mapped to 255. Either value is now supported. (Otherwise, it may have been impossible to click on any controls.) ========================================================================== A-Shell Development Notes Version 5.1.1175.3 (19 February 2010) ========================================================================== 1. --- Bug fix (affecting UNIX only): reducing the size of a dynamic buffer was generating a segmentation fault. (This is rare operation; the only known cases are in XTREE file mode where the FILIDX parameter was passed, or when using REDIMX to shrink an array.) The problem was introduced in 1174.8. 2. --- PAD$(expr,len) function refinement: increase the maximum supported length of the resulting string from 257 to 4K bytes 3. --- FILL$(expr,len) function refinement: test for sufficient string stack space before completing operation, to allow a cleaner error recovery when the specified len is greater than the available memory in the partition. Previously, A-Shell may have crashed before the error was trapped. ========================================================================== A-Shell Development Notes Version 5.1.1175.2 (17 February 2010) ========================================================================== 1. --- ATE bug fix: close a loophole causing an GPF on the server side when the XDEBUG and ATE or KBD traces were active and certain XTREE events occurred. ========================================================================== A-Shell Development Notes Version 5.1.1175.1 (16 February 2010) ========================================================================== 1. --- File hook bug fix: the WRITE hooks were sometimes failing to fire because of confusion with the WRITEL hooks. (WRITE operations may internally be changed into WRITEL depending on locking status.) As a general rule, if you want to hook write operations, you should set both the HFE_xxx_WRITE and HFE_xxx_WRITEL flags. 2. --- XLOCK/FLOCK refinement under Windows: When gaining exclusive access to QFLOCK.SYS (which each XLOCK/FLOCK operation must do while it scans the queue), we now use an alternate Windows locking mechanism which waits internally for the resource to become available. Previously, we used a function that returned a failure code if the resource was in use, and then we implemented the wait operation by sleeping for a randomized number of jiffies and then retrying. While the old system had the advantage of making it easy to ^C out of the wait, it had the disadvantage of effectively allowing heavy users of the resource to completely crowd out light users. The new scheme is much closer to first come first served. (The QFLOCK.SYS table should never be locked for longer than it takes to scan the queue blocks, so in theory, you should never have to wait for more than an instant.) Note: this enhancement does not affect the "C" version, since the alternate locking mechanism described above does not exist in that version. ========================================================================== A-Shell Development Notes Version 5.1.1175.0 (12 February 2010) ========================================================================== 1. --- INFLD GUI enhancement: you may now replace the standard context menu for normal INFLD edit controls and also INFLD combo box controls, by adding the desired context menu definition string to tooltip string (which is itself part of the HLPIDX parameter). The syntax is: >tooltip\menudef The backslash marks the end of the tooltip definition and the beginning of the menudef string. The menudef syntax is the same as that for XTREE PopupMenu definitions, i.e.: text,command;text,command; ... ;text,command The command fields either be virtual keycode strings (e.g. VK_xF101), or arbitrary text (optionally containing control sequences using ^ as the leadin), or $CUT, $COPY, or $PASTE (for the standard clipboard operations). The text fields will be displayed in the context menu as-is, with the exception of "--------" which displays a separator line. For example: >tip\Cancel,VK_ESCAPE;All,*^m;--------,;Cut,$CUT;Copy,$COPY;Paste,$PASTE The above tooltip string defines a tooltip "tip" and a context menu with the following options: "Cancel" sends an ESC (VK_ESC). "All" enters the character "*" into the field followed by a carriage return (*^m). "Cut", "Copy", and "Paste" act like the standard operations. Note that the HLPIDX parameter may contain a help key, a tooltip, a context menu definition, and/or a click command, but they must be in the following order: help key >tooltip \menudef ~clickcmd Furthermore, if you have a menudef but not a tooltip, you must specify the ">" anyway, e.g.: help key >\menudef ~clickcmd (This latter condition avoids compatibility issues with help keys that might contain "\", although any existing tooltips which contain "\" will be effectively truncated at that point, with a probably non-functional context menu replacing the standard one. While this could be annoying, it seems remote enough and not critical enough to go to additional lengths with cumbersome syntax to avoid.) 2. --- MX_FILEHOOK operations now work with old ISAM files, at least for the standard file operations (OPEN, READ, WRITE, CLOSE) on the IDA file. (There is currently no point in hooking the IDX file, as the ISAM statements themselves have no hook processing.) Also, fix a problem with the HFE_PRE_OPEN hook. (If the hook routine opened a file, it probably cleared the hook flags for the file being hooked, causing the hook operations to simply fail.) ========================================================================== A-Shell Development Notes Version 5.1.1174.9 (09 February 2010) ========================================================================== 1. --- UNIX AUXLOC: printing bug fix: multiple copies weren't working unless printer init file had PRTCOPIES=TRUE. 2. --- APEX printing bug fix: requesting multiple copies and a page range from within the APEX print dialog was printing only one copy unless the page range selected included the last page of the file. 3. --- TRACE refinement: TRACE=FOPENS now traces file deletes. ========================================================================== A-Shell Development Notes Version 5.1.1174.8 (26 January 2010) ========================================================================== 1. --- ATE refinement: increase default max wait for ATE command response from 5 to 7.5 seconds. (We were seeing rare cases of MX_FILESTATS after a file transfer taking slightly longer than 5 seconds to respond on a slow network, leading false reports of file transfer failures, particularly in ATEAPX.SBX using terminal channel method.) ========================================================================== A-Shell Development Notes Version 5.1.1174.7 (26 January 2010) ========================================================================== 1. --- MX_FILEHOOKS bug fix: Disabling an existing file hook for an open file wasn't having the desired immediate effect. Also, the HFF_AUTO_DEL flag was only disabling the hook on close, as opposed to deleting it. 2. --- XTREE bug fix: XTF2_DOWN and XTF_UP were sometimes exiting from each other's position (i.e. down arrow from top row, up arrow from bottom row.) 3. --- XTREE refinement: XTF2_DOWN and XTF_UP should now work in checkbox cells. 4. --- XTREE refinement: Multiple column sorting (by holding down the Control key while clicking the column headers) now works more intuitively: with the sort priority following the chronological order the columns were clicked, rather than the other way around. ========================================================================== A-Shell Development Notes Version 5.1.1174.6 (25 January 2010) ========================================================================== 1. --- Restore several internal icons which got accidentally removed in 1174.2. ========================================================================== A-Shell Development Notes Version 5.1.1174.5 (25 January 2010) ========================================================================== 1. --- Compiler bug fix (edit 448): An error in the macro expansion logic related to MAP statements involving nested structures was causing the resulting MAP statements to be truncated. Generally this would have caused a compilation error, but in some cases, the truncation escaped detection by the compiler, leading to structures that were effectively missing fields. If these fields were never referenced directly, the problem could have gone entirely undetected (by the compiler or runtime) thus leading to very difficult to diagnose problems. The problem was most likely rare, but it is strongly recommended that all programs using structures be recompiled just to make sure. (Thanks to Stephen Funkhouser for identifying and reporting the problem!) 2. --- MX_FILEHOOK bug fix: HOOKOP_DISABLE, HOOKOP_ENABLE and HOOKOP_DEL were only operating on the first hook in the table when filespec$ = "*" (instead of operating on every file hook in the table). Also, the return STATUS for those opcodes now more accurately affects the number of file hooks actually changed by the operation. (For example, if you use HOOKOP_DISABLE with filespec$ "*" to disable all hooks, the return status should indicate the number of hooks which were changed from enabled to disabled (rather than the total now disabled). ========================================================================== A-Shell Development Notes Version 5.1.1174.4 (22 January 2010) ========================================================================== 1. --- XTREE bug fix: closed an infinite loop possibility when ANSWER passed in as < 0 to a file-based tree. 2. --- XTREE bug fix: hitting ESC from an editable cell was returning XTR'XROW=0 (as it would for a non-editable cell), instead of the proper cell row. 3. --- MX_FILEHOOK bug fix: file hooks set within an SBX were not persisting on return to the caller. 4. --- MX_FILEHOOK enhancement: New opcode HOOKOP_QRY (7) allows you to query a file hook by its fileid or filespec. If found, the status will be >= 0 and all of the remaining fields will be returned. Add a new param, ENABLED (numeric), which returns 0 or 1 to indicated if the hook is disabled or enabled. XCALL MIAMEX,MX_FILEHOOK,OP,STATUS,FILE$,FID,HANDLER$,EVENTS,FLAGS,ENABLED A new sample/utility program QRYHOOKS.BP[908,50] has been added to the SOSLIB: to demonstrate querying the file hook table. ========================================================================== A-Shell Development Notes Version 5.1.1174.3 (21 January 2010) ========================================================================== 1. --- Windows passthrough /raw printing fix: close a loophole in which some character conversions were still being done, even when DATATYPE = RAW, leading to corruption of PCL graphics. NOTE: Setting PASSTHROUGH = ON for PCL documents containing binary data is not sufficient; you must also set DATATYPE = RAW (in the printer init file). ========================================================================== A-Shell Development Notes Version 5.1.1174.2 (20 January 2010) ========================================================================== 1. --- Misc bug and improvements to the file hook scheme (see 1174.0 below). Implement the hook events for READ, KILL and SORT. ========================================================================== A-Shell Development Notes Version 5.1.1174.1 (20 January 2010) ========================================================================== 1. --- XTREE enhancement: XTF_UP and XTF2_DOWN now work from within editable cells. 2. --- XTREE enhancement: ScrollMode=Tree now affects the operation of XTF_UP and XTF2_DOWN ========================================================================== A-Shell Development Notes Version 5.1.1174.0 (20 January 2010) ========================================================================== 1. --- New file hook mechanism (early beta release) allows you to establish file "hooks" on specific files and file events. The "hook" is an SBX which is called automatically by A-Shell when the specified event occurs on the file. The SBX may then output auditing information, check for anomalies, enforce rules, export data, essentially whatever it likes. To establish a hook on a file: ++include ashinc:ashell.def ++include ashinc:hook.def XCALL MIAMEX, MX_FILEHOOK, OP, STATUS, FILE$ {,FID, HANDLER$, EVENTS, FLAGS} MX_FILEHOOK is defined as 178 (in ashell.def) OP [num, in] may be one of the following (defined in hook.def): HOOKOP_DISABLE (0) ! disable one (or all) hooks HOOKUP_ENABLE (1) ! re-enable one (or all) hooks HOOKUP_ADD (2) ! add a new hook HOOKOP_DEL (3) ! delete a hook HOOKOP_APPEVENT (6) ! call the hook to process an app-defined event STATUS [signed num, out] returns status code: >=0 = success -1 = unable to allocate memory for hook table -2 = illegal fspec (must be AMOS-style) -3 = invalid handler syntax -4 = fspec not found (OP 0,1,2,6) -5 = fid not found (OP 0,1,2,6) -6 = opcode not yet implemented -7 = illegal opcode FILE$ [string, in] is the specification of the file whose operations are to be hooke. (Only AMOS-compatible filespecs are currently suported.) Note that with OPs 0, 1 and 3, FILE$ may be "*" to perform the operation on all the hooks in the hook table. FID [num, in] is a unique integer identifier for the file, which will be used in any output files to reference the file (more compact than outputting the file spec each time.) HANDLER$ [string, in] depends on the OP. For OP 2 (add), it must specify the handler for the hook, using the following syntax: SBX:xxxxxx where xxxxxx is the name of an SBX file, which will be called to process the hook. (see "HOOK SBX SPECIFICATION" below for further details. Note that additional handler types (and corresponding syntax), such as a text file, FIFO, or TCP connection, may be defined later. For OP 6 (HOOKOP_APPEVENT), the HANDLER$ parameter may be used to pass an arbitrary string to the hook routine. Typically this may be used to include a message in the hook log file, such as "posting run complete". EVENTS [b4, in] is a bit-field of events to hook, from the following (defined in hook.def): define HFE_PRE_OPEN = &h00000001 ! prior to open define HFE_POST_OPEN = &h00000002 ! after open define HFE_PRE_CLOSE = &h00000004 ! prior to close define HFE_POST_CLOSE = &h00000008 ! after close define HFE_PRE_READ = &h00000010 ! prior to read or get (any) define HFE_POST_READ = &h00000020 ! after read or get (any) define HFE_PRE_READL = &h00000040 ! prior to readl or getl define HFE_POST_READL = &h00000080 ! after readl or getl define HFE_PRE_WRITE = &h00000100 ! prior to write (or update'record) define HFE_POST_WRITE = &h00000200 ! after write (or update'record) define HFE_PRE_WRITEL = &h00000400 ! prior to writel (or create'record) define HFE_POST_WRITEL = &h00000800 ! after writel (or create'record) define HFE_PRE_ALLOC = &h00002000 ! prior to allocate define HFE_POST_ALLOC = &h00004000 ! after allocate define HFE_PRE_KILL = &h00008000 ! prior to kill define HFE_POST_KILL = &h00010000 ! after kill define HFE_PRE_SORT = &h00020000 ! prior to allocate define HFE_POST_SORT = &h00040000 ! after allocate define HFE_APP_EVENT1 = &h10000000 ! custom application event FLAGS [b4, in] is a bit-field of flags which are passed to the hook routine (as a clue to how the hook should operate, and/or which are used by A-Shell to modify the operation of the hook (from hook.def): define HFF_PROG = &h00000001 ! include program name define HFF_SBX = &h00000002 ! include sbx name define HFF_DATA = &h00000004 ! include data (for WRITE hook) define HFF_DATA_WAS = &h00000008 ! include data (prior to write (POST_WRITE only) define HFF_RECNO = &h00000010 ! include recno define HFF_TIME = &h00000020 ! include time define HFF_DATE = &h00000040 ! include date define HFF_USER = &h00000080 ! include user name define HFF_PID = &h00000100 ! include process id define HFF_AUTO_DEL = &h00001000 ! auto delete hook on prog exit HOOK SBX SPECIFICATION: The SBX you specify to handle the hook will be called automatically by A-Shell for the specified events, as follows: XCALL , STS, ENVELOPE, REC, PRE'REC STS [out, num] will return 0 for ok. Any odd value returned from a HFE_PRE_xxx event will cause A-Shell to skip the event. (This allows you to completely replace the file operation originally programmed, with one of your own.) ENVELOPE [in, structure] is a structure containing the following information (defined in hook.def): DEFSTRUCT ST_HOOK_ENV ! information passed to hook routine map2 event,b,4 ! event code (see HPE_xxxx flags) map2 flags,b,4 ! event processing flags (see HFF_xxx) map2 fileid,b,4 ! unique file id # map2 recno,f,8 ! rec # map2 pid,b,4 ! process id map2 recsiz,b,4 ! record size map2 mode,b,4 ! mode (depends on event) map2 prog,s,16 ! program name map2 sbx,s,16 ! sbx name (if appl) map2 user,s,24 ! user name ENDSTRUCT REC [in, s or x] contains data relative to the event. For the HFE_POST_READx and HFE_xxxx_WRITEx events, it will contain the record data which was just read or which is to be (or was just) written. For the OPEN, ALLOC and KILL events, it will contain the filespec (in native format). For the APPEVENT event, it will contain the contents of the HANDLER$ parameter passed to the MX_FILEHOOK call. For other events, it may be undefined. PRE'REC [in, x] is only used with the HFE_POST_WRITE event, when the HFF_DATA_WAS flag is set, in which case it will contain the previous contents of the record (immediately prior to being written). Warning: the "previous contents" will be null if the previously read record number is not the same one being written. (A better way to handle that situation may come later.) A sample hook (FSHOOK1) and sample program (FHOOKTST1) can be found in [908,50] of the SOSLIB. WARNING/REMINDER: The details and specs of the file hook mechanism are subject to change in the near future, so should be used only experimentally for now. ========================================================================== A-Shell Development Notes Version 5.1.1173.5 (19 January 2010) ========================================================================== 1. --- (Linux only) Fix TCPX problem in which it complained of not being able to load libashtls. (This was due to some not-ready-for-prime-time code attempting to support Transport Layer Security, i.e. TLS, within TCPX.) 2. --- APEX bug fix: Settings > Preview Preferences was crashing A-Shell. ========================================================================== A-Shell Development Notes Version 5.1.1173.4 (15 January 2010) ========================================================================== 1. --- Fix a couple of additional bugs relating to MX_GDICALC (also introduced around 1166.6). ========================================================================== A-Shell Development Notes Version 5.1.1173.2 (15 January 2010) ========================================================================== 1. --- Dynamic variable bug fix: Passing an uninitialized dynamic string to a function, procedure or SBX was generating a protection fault. (Problem was introduced around 1166.6) ========================================================================== A-Shell Development Notes Version 5.1.1173.1 (14 January 2010) ========================================================================== 1. --- Compiler (edit 447) and runtime enhancement: new statement: XGETARGSBX , XGETARGSBX is to XGETARG as XPUTARGSBX (see below) is to XPUTARG. ========================================================================== A-Shell Development Notes Version 5.1.1173.0 (14 January 2010) ========================================================================== 1. --- Compiler (edit 446) and runtime enhancement: new statement: XPUTARGSBX , Acts just like XPUTARG except that it references in the current SBX context, even if it occurs inside a function or procedure. XPUTARG continues to act as before, referencing the function or procedure argument if inside a function or procedure, else the SBX argument if not. Note that using XPUTARGSBX in a program will set the "5.1 extensions" flag in the header, which will can be seen by VERSYS, and which will cause a runtime error in versions of A-Shell prior to 1160, but it will not provide any warning in versions 1160-1172. (In those versions, the runtime system will generate an illegal syntax code when hitting such a statement.) ========================================================================== A-Shell Development Notes Version 5.1.1172.0 (13 January 2010) ========================================================================== 1. --- New OpenSSH transport option. This only affects ATE directly, but it involves introduction of a new DLL (ASHNET2.DLL) and a modification to the interface of the ASHNET.DLL (which should all be updated at the same time.) It isn't yet clear what the advantages or disadvantages of this implementation are, but the motivation for including it are: a. As a possible solution to a rare but annoying problem in the existing SSH implementation (based on libraries licensed from Chilkat) in which the session disconnects spontaneously. b. The new implementation is cross-platform, opening the door to possibly support SSH-based capabilities (a new SFTP perhaps?) under A-Shell/UNIX. ========================================================================== A-Shell Development Notes Version 5.1.1171.5 (13 January 2010) ========================================================================== 1. --- Windows printing bug fix: After faxing, subsequent non-fax print requests were subject to getting spurious "Invalid Handle" errors. 2. --- Internal Windows-relate bug fix: Close a loophole in which a control-c status at the start of messagebox display operation could cause an infinite loop (with no messagebox displayed). 3. --- Compiler bug fix (edit 445): ++PRAGMA FORCE_FSPEC was sometimes failing to convert %s to the program filename, resulting in an output file with no filename. 4. --- Internal improvement: processing of language-specific message files (e.g. SBRMSG.xxx) is now more efficient than before (improved cacheing). 5. ---- Various internal changes related to ASHNET.DLL and ASHNET2.DLL in preparation for supporting an alternate SSH implementation (but which are not ready to use, so this update should NOT be used with ATE!). 6. --- XTREE enhancement: Two new flags: XTF2_PGUPDN (&h00000040) Enable PgUp/PgDn (exitcodes 4, 6) XTF2_DOWN (&h00000080) Enable Ctrl+Down on last row (exitcode -43) ========================================================================== A-Shell Development Notes Version 5.1.1171.2 (08 January 2010) ========================================================================== 1. --- GUI refinement: hot tracking (introduced in 5.1.1170) now applies to static and button controls that have MBF_SHLEXC, MBF_CMDLIN, or MBF_DLL (previously was just MBF_KBD). 2. --- GUI refinement: MBF_SHLEXC, MBF_CMDLIN, and MBF_DLL now have precedence over MBF_KBD. (MBF_KBD is ignored if any of the others are set.) This is not technically a fix, since you should never use more than one of those options, but this refinement helps avoid a common application coding bug (including one in Leo). ========================================================================== A-Shell Development Notes Version 5.1.1171.1 (08 January 2010) ========================================================================== 1. --- Windows printing bug fix: Minor cleanup of passthrough logic to follow the proper sequence of formalities for starting/ending each page, and expand the TRACE LP to track this better. ========================================================================== A-Shell Development Notes Version 5.1.1171.0 (07 January 2010) ========================================================================== 1. --- (Internal) Begin internal modifications to support alternate SSH implementation. 2. --- Windows printing bug fix: Eliminate a scenario in which options from a print operation would carry over to affect a subsequent print operation. ========================================================================== A-Shell Development Notes Version 5.1.1170.2 (04 January 2010) ========================================================================== 1. --- COMIO.SBR refinements: A new status code -9 (unable to set comm parameters) has been added to distinguish when the open operation fails because of fundamental reasons (status -7) or because of an error while initializing the port (status -9). Also, the system error message (returned in the msg parameter) now begins with the actual Windows error code, making it easier to identify with precision. ========================================================================== A-Shell Development Notes Version 5.1.1170.1 (02 January 2010) ========================================================================== 1. --- APEX enhancement: add a font option (and darkness) to the Preview Preferences dialog. 2. --- EZ-SPOOL bug fix: Choosing a printer from the EZ-SPOOL printer menu whose init file contained PREVIEW=ON was not activating preview mode. (It was relying on the original switches and original printer init file only.) ========================================================================== A-Shell Development Notes Version 5.1.1170.0 (30 December 2009) ========================================================================== 1. --- AUI_CONTROL enhancement: switch cursor to a pointing finger when it is over a button or static text control with a click action ========================================================================== A-Shell Development Notes Version 5.1.1169.9 (29 December 2009) ========================================================================== 1. --- Experimental AUI_CONTROL feature: setting the &h020000 bit in the CTYPE2 parameter of a MBF_STATIC control will cause the control to display a "button-like" border when the mouse is over it (i.e. hot tracking). This could be useful with MBF_STATIC controls that have click actions, but the implementation is likely to change, so don't do more than experiment with this. 2. --- XPUTARG / Dynamic String bug fix: XPUTARG was failing to clear the target variable (i.e. the calling param) when the source variable (the one being returned or "put") was an uninitialized dynamic string. Such stings have a size of 0, causing the transfer routine to transfer 0 bytes, which could have resulted in the calling routine mistakingly interpreting the parameter as having been returned from the last SBX or func/proc call rather than from the previous value of that parameter. ========================================================================== A-Shell Development Notes Version 5.1.1169.8 (28 December 2009) ========================================================================== 1. --- AUI_MENU bug fix: automatic deletion of child menu items was not working when a top-level parent menu with no itemid was deleted. ========================================================================== A-Shell Development Notes Version 5.1.1169.7 (27 December 2009) ========================================================================== 1. --- Compiler enhancement: instances of named structures can now be overlayed. For example: MAP1 REC,X,64 MAP1 CUS,ST_CUS,@REC MAP1 VEN,ST_VEN,@REC This was always possible with unnamed structures, so the technique is not new. Put previously, the compiler would have complained when used with named structures as in the example above. 2. --- EVENTWAIT bug fix: the fix in 1166.6 relating to EVW_NOFOCUS was causing the DEL key to no longer exit with exitcode -47. ========================================================================== A-Shell Development Notes Version 5.1.1169.6 (23 December 2009) ========================================================================== 1. --- GUI display fix: the background of static icons within a TAB control was displaying in black instead of transparent. 2. --- Static text controls with the FGC (foreground color) set to an RGB value and the BGC value set to -2 were sometimes getting an unexpected backround color. ========================================================================== A-Shell Development Notes Version 5.1.1169.5 (23 December 2009) ========================================================================== 1. --- INFLD dynamic variable fix: when using a dynamic ENTRY variable, MAXCHARS was being effectively limited to the larger of XMAX and the existing entry variable contents. (Generally noticed as horizontal scrolling not working.) 2. --- Windows printing bug fix: the DELETE switch was not being obeyed in one particular set of circumstances involving APEX and ATE. 3. --- XTREE bug fix: Close a loophole in which ANSWER was being returned > 0 in the case where XTF_NOSEL was set (i.e. display only), but the incoming XTR'XROW field was > 0. This wasn't exactly a bug, but it started happening in 1169.0, and caused some applications to misinterpret the ANSWER>0 as indicating a selection operation. 4. --- INPUT bug fix: regular (non CSV) INPUT statements were failing to stop at the comma delimiters when the preceding field was quoted. (Problem introduced between 1163.0 and 1164.0 in the process of fixing INPUT CSV.) ========================================================================== A-Shell Development Notes Version 5.1.1169.4 (22 December 2009) ========================================================================== 1. --- Windows printing bug fix: close another loophole causing A-Shell to crash when the printer specified in the DEVICE= statement doesn't exist. (This problem introduced in 1169.2 while fixing a similar problem.) ========================================================================== A-Shell Development Notes Version 5.1.1169.3 (22 December 2009) ========================================================================== 1. --- Beveling bug fix: enabling 'beveling' and standard line drawing characters was leading to visual chaos, at best. Why anyone would want both is beyond the scope of this discussion, but if both options are enabled, you now get something more visually pleasing (similar to a double line with shading). ========================================================================== A-Shell Development Notes Version 5.1.1169.2 (21 December 2009) ========================================================================== 1. --- Windows printing bug fix: close a loophole leading to an infinite loop when the last user printer no longer exists and other conditions met. 2. --- Windows printing bug fix: in some cases, printing to the PROMPT: device was bypassing the print dialog and printing directly to the last used printer. 3. --- Windows printing refinement: When attempting to match the requested printer from the printer init DEVICE statement against the available printers, the function which scanned the available printers was actually trying to open each one, which can lead to long delays in cases where printers are technically available, but unresponsive (or very slow to respond). To avoid this, we now use an alternate scan that only checks the local registry and thus is fast, but which can only compare printer names, not ports. (Since 99% of the time, the printer is identified by name rather than port, this limitation should not pose a significant problem. And in any case, if we fail to achieve a match on printer names, we revert to the previous method.) ========================================================================== A-Shell Development Notes Version 5.1.1169.1 (19 December 2009) ========================================================================== 1. --- VUE bug fix: A source line > 2022 characters containing TABs would crash VUE when you moved the cursor off the line. 2. --- SYSTAT.LIT 3.0(161) enhancement: new /H switch displays available disk space in "human-readable" units (GB or MB) rather than 'blocks'. Also, even without /H, the display format is automatically widened, but only if necessary, to prevent numeric overflow of the available disk blocks (more than 999,999,999 blocks). 3. --- DIR.LIT 3.0(148) bug fix: file names incompatible with AMOS file.ext format (e.g. with more than one extension) were being omitted from the output when the output was being sent to a file, even if /NA was specified. (This is normal when /NA is not specified). The problem only occurred when /NA was at the end of the wildcard list (rather than immediately following 'DIR'. (DIR/NA out.list=*.* was ok, but DIR out.lst=*.*/NA was not.) ========================================================================== A-Shell Development Notes Version 5.1.1169.0 (16 December 2009) ========================================================================== 1. --- XTREE bug fix: The patch in 1168.7 to support ANSWER > 32K had the side effect of returning ANSWER=1 (instead of 0) after an XTREE display using XTF_NOSEL. This was causing some applications to misinterpret the returned ANSWER value, as if the user had selected it, generally leading to chaos. Now fixed. 2. --- XTREE refinement: Displaying a multi-level tree with one or more levels collapsed was sometimes causing a "flash" as the expanded rows were first displayed and then collapsed. 3. --- XTREE bug fix: Optimization logic in 1166.3 was in some cases leading to an infinite loop on the initial load of a tree. ========================================================================== A-Shell Development Notes Version 5.1.1168.9 (14 December 2009) ========================================================================== 1. --- APEX bug fix: eliminate confusion in the way the default printer is selected by combining the "prompt dialog default" with the "preview default" while within APEX. ========================================================================== A-Shell Development Notes Version 5.1.1168.8 (13 December 2009) ========================================================================== 1. --- XTREE bug fix: Self-service combos stopped working in 1166.6. 2. --- Close longstanding crash possibility in large mode sort. ========================================================================== A-Shell Development Notes Version 5.1.1168.7 (13 December 2009) ========================================================================== 1. --- INFLD / dynamic variable bug fix: preload wasn't working with dynamic variables unless the existing size of the variable was >= XMAX. (Expanding the variable to accommodate XMAX was clearing it.) 2. --- XTREE bug fix: The returned row # and data in simple selection trees was not working beyond 32K, due to sharing an internal legacy variable with INMEMO (EXTROW). Note that the 32K limit remains for the non-GUI version of PCKLST. Also note that this requires an update on both the server and client sides (for ATE). ========================================================================== A-Shell Development Notes Version 5.1.1168.6 (11 December 2009) ========================================================================== 1. --- GDI printing enhancement: The width parameter in the //SETFONT command may now be used to specify the character width in terms of the number of characters that would fit on a line, by setting it to the negative of that value. For example, to select a font that would fit 90 characters across the page, set the width parameter to -90. 2. --- APEX bug fix: The font calculated based on the auto pitch feature was not always taking into account the hardware offsets on the printer, (depending on the sequence of previewing events), leading to excessive discrepancy between the size of the font used in the preview window vs. that used in the actual output. 3. --- XTREE bug fix: Certain tree configurations where either failing to load entirely (while sucking up CPU and memory resources) or would take a long time to load. ========================================================================== A-Shell Development Notes Version 5.1.1168.5 (10 December 2009) ========================================================================== 1. --- APEX and GDI Printing bug fixes: - STRIPFF was not working completely. APEX was stripping the leading CR but counting it in the page count, and printing from APEX was typically causing the blank leading page to come back. - After printing from APEX with a page range, a second print operation would use the same page range even if no page range selected. - When DEVICE = PROMPT:, APEX is supposed to use as its default the last printer used for APEX purposes, but it was in many cases reverting to the overall Windows default printer. - Attempt to preserve printer INI settings even when selecting a different printer from APEX. ========================================================================== A-Shell Development Notes Version 5.1.1168.4 (10 December 2009) ========================================================================== 1. --- XTREE bug fix: the optimization logic in 1166.3 was failing to work properly (sometimes resulting in a much slower overall load time) in editable trees and especially multi-level ones when the initial targetrow was 0 (as it usually is). ========================================================================== A-Shell Development Notes Version 5.1.1168.3 (9 December 2009) ========================================================================== 1. --- Compiler (edit 443) - fix spurious "REPEAT/EXIT outside of loop" error when the REPEAT or EXIT occurred inside a FOR ... loop which immediately followed a MAP statement. 2. --- Command line enhancement: command line history buffer (^R, ^T) expanded from 10 to 25 lines. 3. --- GDI printing refinement: "*" is now treated as equivalent to "AUTO" in the CPP= statement of the printer init file. For whatever reason, this was apparently a common mistake or misunderstanding, aggravated by the fact that anything other than "AUTO" or a number was effectively treated as 132 (making CPP=80,*) appear to work, until you tried a file with more than 132 columns. In addition to recognizing "*", essentially anything non-numeric now results in the equivalent of AUTO. 4. --- APEX refinement: The "print as intended" toolbar button is no longer disabled when the originally specified printer was PROMPT:. (The theory was that "print as intended" was entirely ambiguous, but the resulting confusion was more trouble than the ambiguity.) 5. --- APEX bug fix: When printing from with APEX, the default pitch was being set to 80,132 rather than 80,AUTO, resulting in the printed output being scaled differently than the preview indicated. ========================================================================== A-Shell Development Notes Version 5.1.1168.2 (7 December 2009) ========================================================================== 1. --- INPUT CSV bug fix: 1167.2 fix was causing a field consisting only of "" to be returned as ". Also, a delimiter following a "" was being treated as a raw character, even when there was no active opening quote on the field. ========================================================================== A-Shell Development Notes Version 5.1.1168.1 (7 December 2009) ========================================================================== 1. --- GDI printing behavior rollback: As of 5.1.1163.0, an internal routine responsible for removing quotes from strings was upgraded to not remove unbalanced quotes, but this was apparently causing some quote-challenged people problems in the //TEXTxxx GDI directives. So the pre-1163 behavior is now restored (meaning that //TEXTOUT,1,2,"abc will print as abc rather than as "abc). ========================================================================== A-Shell Development Notes Version 5.1.1168.0 (6 December 2009) ========================================================================== 1. --- COMIO.SBR enhancement: In addition to the existing OPCODE 8 (read) special COUNT values of 0 (read to LF) and -1 (read to CR), you may now specify any character value for the terminating character to read to, by putting its negative ASCII value (-2 thru -257) in COUNT. For example, COUNT = -3 ! read to ETX or chr(3) xcall COMIO, 4, CH, BUF, STATUS, COUNT Since -1 is interpreted as chr(10) (LF), to specify chr(1) (SOH) as the terminating character, set COUNT = -257. To read up until a explicit null byte, set COUNT = -256. Note that this requires that we receive a explicit null byte in the input buffer, not to be confused with the implicit null byte used to terminate the buffer. Consistent with previous operation, the terminating byte is discarded, although it is included in the returned COUNT (indicating the number of characters received). And in the case of COUNT = 0 (wait for LF), if the character preceding the LF is CR, the CR is also discarded. (The previous documentation described this option as waiting for CRLF, but in reality, it has always terminated on LF, with the preceding CR being optional.) 2. --- TRACE LP refinement: SET TRACE LP wasn't displaying the "Comparing..." messages (showing how the specified printer device is being matched up to the available ones) in the case of ATSD connections. (They were appearing in the ashlog.log instead.) Now they appear in the ATE debug message window (if the client is ATE), else in the main window. ========================================================================== A-Shell Development Notes Version 5.1.1167.7 (5 December 2009) ========================================================================== 1. --- APEX/PDFX bug fix: PDFX license was being lost when printing to PDFX from APEX (causing the demo-mode stamps to appear on the output.) 2. --- APEX bug fixes: - Some dialogs displayed by APEX (like printer selection) were causing the APEX window to be repositioned behind the original main window. - Scaling of output generated from the APEX print dialog was not matching scaling of output generated directly. ========================================================================== A-Shell Development Notes Version 5.1.1167.6 (4 December 2009) ========================================================================== 1. --- Windows 7-bit charset bug fix: virtual key sequences (e.g. VK_F###, VK_xF###, chr(7)+chr(250)+...) were not working in 7-bit mode. 2. --- XTREE bug fix: the 1167.5 patch was causing the answer array to not be returned when the editable tree was exited with ESC. ========================================================================== A-Shell Development Notes Version 5.1.1167.5 (3 December 2009) ========================================================================== 1. --- MX_EXPFIL enhnancement: you may now use this funtion to reduce the size of a file by specifying a negative value for the addrecs parameter: xcall MIAMEX, MX_EXPFIL, ch, addrecs, status Note that addrecs should be the number of LOGICAL records to add to the file (addrecs > 0) or subtract from the file (addrecs < 0). 2. --- XTREE refinement: exiting with ESCAPE was not update the saved column configuration. (This was previously reported incorrectly as having been fixed in 1127.2.) ========================================================================== A-Shell Development Notes Version 5.1.1167.4 (2 December 2009) ========================================================================== 1. --- APEX bug fix: The APEX printer dialog was offering the option of printing the current page or a range of pages, but in actuality it was printing the entire document. Those options are now properly supported. ========================================================================== A-Shell Development Notes Version 5.1.1167.3 (2 December 2009) ========================================================================== 1. --- XTREE bug fix: The column width save/restore feature (XTUCFG_WIDTH) was only working up to the first hidden column. (It was broken in 1164.6) ========================================================================== A-Shell Development Notes Version 5.1.1167.2 (1 December 2009) ========================================================================== 1. --- Windows font selection bug fix: Previously it was not possible to switch to the MIAME Terminal font using the font dialog if miame.ini FONT= statement specified the ANSI character set. (The problem here is that MIAME Terminal does not support the ANSI character set, and in the font selection rule hierarchy, character set is more important than face name. So requesting MIAME Terminal was typically resulting in Courier New, which does support ANSI.) This problem has now been fixed by detecting the choice of MIAME Terminal and switching to the OEM character set. This in turn allows ATE users to easily override the default font (Lucida Console, ANSI) by changing to MIAME Terminal and then using the File > Save Settings option. 2. --- INPUT CSV bug fixes: - last field on line was not being de-quoted - "" (literal quote pairs) were not always acting like raw characters when at the start or end of a field. (That is, sometimes they were being removed as if they were part of the standard field quoting.) 3. --- MX_KILL and MX_ZAPQUEUE now leave entries in ashlog.log. 4. --- APEX bug fix: display mode was inappropriately reverting to multi-page (typically making the page very small) whenever returning from the APEX print or print setup dialogs. ========================================================================== A-Shell Development Notes Version 5.1.1167.1 (25 November 2009) ========================================================================== 1. --- GUI display bug fix: dialog grid scale factors were incorrectly being applied to the main window. ========================================================================== A-Shell Development Notes Version 5.1.1167.0 (24 November 2009) ========================================================================== 1. --- Windows printing bug fix: when a print filter changed the printer name or switches, it was causing an infinite loop. 2. --- Cleanup some leftover issues from the removal of the limits on menu items and controls (see 5.1.1166.6). Menu items beyond 400 were not responding to click events, and in some cases controls beyond 600 were not behaving properly. ========================================================================== A-Shell Development Notes Version 5.1.1166.9 (23 November 2009) ========================================================================== 1. --- INFLD GUI bug fix: INFLD controls stopped working properly in 1166.6 ========================================================================== A-Shell Development Notes Version 5.1.1166.8 (22 November 2009) ========================================================================== 1. --- XTREE enhancement: expand the table of RGB color definitions (RGBbg=, RGBfg=) from 26 to 52 (A-Z, a-z). ========================================================================== A-Shell Development Notes Version 5.1.1166.7 (21 November 2009) ========================================================================== 1. --- AUI_EVENTWAIT bug fix: EVW_NUMERIC was not working (was returning 0 rather than the value keyed in). ========================================================================== A-Shell Development Notes Version 5.1.1166.6 (21 November 2009) ========================================================================== 1. --- EZVUE refinement: the cursor state (shape and blink option) is now saved and restored. Previously on exit from EZVUE, blink was turned off. 2. --- AUI_MENU enhancement: remove limit of 250 menu items. The menu table now expands automatically as needed. 3. --- AUI_CONTROL enhancement: remove limit of 600 controls. The control table now expands as needed (and starts out much smaller, freeing up about 500K of Windows heap memory for programs using less than 100 controls). 4. --- AUI_EVENTWAIT bug fix: eliminate problem where it was intermittently returning exitcode 99 (error) when called with EVW_NOFOCUS. (It was trying to validate the parentid/controlid parameters before noting that it doesn't matter when EVW_NOFOCUS is specified.) ========================================================================== A-Shell Development Notes Version 5.1.1166.5 (20 November 2009) ========================================================================== 1. --- XGETARG / XPUTARG bug fix: passing a F,6 variable to an XCALL expecting to receive an X variable, and vice versa, wasn't doing a raw copy. (Thus if the X variable was overlayed by an F,6 the resulting value wasn't matching the passed value). 2. --- XPUTARG refinement: passing an F,6 variable when the caller was expecting an S was resulting in the correct value, but wasn't formatted in the same way you would expect when assigning an F to an S (typically unneeded trailing zeroes or the wrong significance). (Same refinement as in 1164.4, but in a different context.) ========================================================================== A-Shell Development Notes Version 5.1.1166.4 (18 November 2009) ========================================================================== 1. --- XTREE refinement: minor optimization in the initial display logic, eliminating a "flash" caused by double-drawing. ========================================================================== A-Shell Development Notes Version 5.1.1166.3 (17 November 2009) ========================================================================== 1. --- XTREE refinement: close a further CPU bottleneck during the initial load of a large tree. (Shaved about 90% off the load time for a sample tree with 6000 items and 25 columns.) 2. --- TPRINT/DPRINT bug fix: fix further problem with main window transparency. ========================================================================== A-Shell Development Notes Version 5.1.1166.1 (16 November 2009) ========================================================================== 1. --- XTREE refinement: close a CPU bottleneck in pre-processing XTREE array data (server side in case of ATE) when the rows don't have trailing nulls. 2. --- TPRINT/DPRINT bug fix: refinement described under 1166 below weren't working for main windows. ========================================================================== A-Shell Development Notes Version 5.1.1166.0 (16 November 2009) ========================================================================== 1. --- MBF_STATIC refinement: the default BGC value of -2 (NUL_BGC) is now taken to mean transparent, rather than "theme background". 99% of the time this is what people wanted, but when the parent window background color did not match the expected static text theme background (gray), you ended up with unwanted gray backgrounds for your static text. 2. --- TPRINT/DPRINT refinements: these now appear with transparent backgrounds rather than the standard theme (gray) background. See previous item above. Note that in the ATE environment, updating either the server or the client should be sufficient for this enhancement to take effect in most windows, but to work in dialogs and tab controls with explicit RGB colors, you will need to update both the client and server side. (Updating just one will probably retain the status quo.) Also note that you may now force TPRINT/DPRINT to override the default color scheme by first using TAB(-2,x+64) and/or TAB(-3,x+64) to establish default foreground/background colors. (This is consistent with the rule used by MBF_STATIC to decide whether to overide the theme colors. Note, however, that this effect is controlled on the server side for ATE. 3. --- Floating point rounding refinement in VAL(), INT(), FIX(), and USING: Normally, in order to more closely mimic the floating point rounding idiosyncrasies of AMOS, A-Shell converts floating point values to 48 bit within the above mentioned functions, which is fairly effective at eliminating deviations between AMOS and A-Shell when floating point numbers are not carefully rounded at the application level. But, it no longer does this for values larger than 99,999,999,999 since they cannot be stored in 48 bit floating point format without losing part of the integer value. (Note, however, that this only extends the useful maximum number from 11 digits to about 16, since after that even 64 bit floating point won't be able to hold them.) 4. --- Line drawing character bug fix: tab(-1,52)/tab(-1,53) (double horizontal and double vertical lines) were displaying as some kind of garbage characters when not in OEM font mode. Now, they are converted to the single line equivalent when using the ANSI character set and not beveling (because the ANSI character set does not have these symbols). In beveling mode, they are emulated in a way consistent with the other beveled line characters. 5. --- VUE refinement (or fix?) - cursor is now forced on in VUE edit mode. (It's very hard to edit without a visible cursor. The problem may have been introduced recently, since it was never before reported.) ========================================================================== A-Shell Development Notes Version 5.1.1165.1 (10 November 2009) ========================================================================== 1. --- GDI Printing bug fix: the print init command ORIENTATION = LANDSCAPE was broken in 1160.4 ========================================================================= A-Shell Development Notes Version 5.1.1165.0 (05 November 2009) ========================================================================== 1. --- GDI printing refinement: The old printer init command DATATYPE = RAW (in conjunction with PASSTHROUGH mode) now prevents A-Shell from doing any special processing relating to the CR, LF, and FF control characters. This may be necessary in order to embed raw graphics into print files, as may be needed with certain EPF (e.g. Zebra label printer) and PCL protocols. Otherwise, even though PASSTHROUGH mode sounds like it "passes everything through", in reality, you still get conversion of isolated LF into CRLF, and it still identifies page breaks by FF (i.e. chr(12)), calling a standard GDI printing routine to inform the printer of the start of a page. The LF to CRLF conversion would obviously alter any graphic image, and the page break call may have had unknown results, depending on the driver. Doc note (to Ty): We need to completely rewrite the existing DATATYPE topic in the Setup Guide. Remind me of that later. 2. --- TPRINT/DPRINT refinement: The background color (taken from the last TAB(-3,x) command) was not working in theme environments. That is, the standard theme background (typically gray) was being used. Now it works as expected. (Note: for ATE, server side must be updated.) ========================================================================== A-Shell Development Notes Version 5.1.1164.9 (04 November 2009) ========================================================================== 1. --- Dialog centering refinement: when centering a dialog with MBF_DLGNOCREEP and without MBF_DLGNOPARENT, base the centering on the main window rather than on the dialog's real parent. ========================================================================== A-Shell Development Notes Version 5.1.1164.8 (03 November 2009) ========================================================================== 1. --- AUI_CONTROL bug fixes relating to dialog centering - - Dialogs with desktop as parent (MBF_DLGNOPARENT) were not getting centered at all unless the main window was on the main monitor. - When a dialog was being centered on the main window or another dialog, it was coming out slightly to the left (by the width of the borders), and somewhat too high (by an amount related to the difference between the height of the combined caption/menu bar/status bar and bottom status bar, if applicable. ========================================================================== A-Shell Development Notes Version 5.1.1164.7 (02 November 2009) ========================================================================== 1. --- MSGBOX.SBR refinement: MBMISC_DEFLT2 and MBMISC_DEFLT3 flags (to select the default button) are now supported in text mode. (Previously text mode always selected the first button.) Also, the Windows version now uses the LDF to get the button labels (the UNIX version has done this for a long time). 2. --- XTREE refinement: Adding the H (hidden) flag to a column now overrides the saved column widths. (Previously, unless you also set the cwidth to 0, the column would reappear as previously saved.) ========================================================================== A-Shell Development Notes Version 5.1.1164.6 (30 October 2009) ========================================================================== 1. --- ISMUTIL VERIFY operation now outputs information to ashlog.log on errors. (On the screen, it only shows the type of error without any helpful details.) ========================================================================== A-Shell Development Notes Version 5.1.1164.5 (29 October 2009) ========================================================================== 1. --- XTREE refinement: Adding the H (hidden) cformat code to an otherwise visible column with a non-zero size wasn't always making the column disappear. (Settings its cwidth=0 worked, but just adding H should have been sufficient.) 2. --- MX_BROWSEFOLDER and MX_GETOFD refinement: If the initial path or directory is in the form of a drive letter and colon, with no trailing slash (e.g. "C:"), automatically append "\" to avoid confusion. (Such ambiguous specs are otherwise likely to be misinterpreted by A-Shell and/or Windows.) ========================================================================== A-Shell Development Notes Version 5.1.1164.4 (28 October 2009) ========================================================================== 1. --- XGETARG / XPUTARG refinement: The fix in 1160.0 to preserve the fractional value of a floating point expression converted to string during parameter passing was resulting in a trailing ".0" when integer floating point values were converted to string. (e.g. 1 was converted to "1.0") This was causing side effects in routines that were treating the resulting string as a literal key of some kind (INIX.SBX being one example). Now, the string result is stripped of the trailing ".0". 2. --- INMEMO refinement: For applications still using INMEMO in an otherwise GUI environment, to make it slightly more Windows-friendly, putting "|K" in your INFDEF string (via SBR=INFDEF:|K, or SET INFDEF, or MIAMEX,MX_INFDEF), will now cause the following changes: - Control+A selects the entire memo. - DEL (immediately after Control+A) will clear the memo. (Any other keyboard operation except Control+C just unselects the memo and then responds as it would otherwise.) - Control+C copies the selected text to the clipboard. (This works for both the entire memo selected by Control+A, and also for any other inmemo text selected with the mouse.) - Control+V pastes the clipboard text into the memo. - ESC will prompt whether to save changes, discard or cancel. (Since the normal abort key, Control+C, has a different meaning in |K mode, ESC has to serve for both updating and aborting.) The text of the messagebox that appears is the same as that used by XTEXT and is defined in SBRMSG.xxx as message 023,001. 3. --- INFLD GUI refinement: - Control+A now selects the field (same as Shift+End) - Alt+Backspace (as well as Control+Z) perform a primitive "undo". The first time it will restore the field to its state immediately prior to the last key (mainly useful if you accidentally selected the entire field and then deleted it). The second time, it will restore the original (starting) value of the field. 4. --- MBF2_STATICWIN controls may now be made clickable in the normal way (adding the MBF_KDB flag to ctype and putting a click string in the ccmd parameter). ========================================================================== A-Shell Development Notes Version 5.1.1164.3 (26 October 2009) ========================================================================== 1. --- Function / SBX nesting bug fix: The function level nesting counter (.NEST_LEVEL) was incorrectly getting reset at the start of an SBX call. This probably didn't matter to anyone until a recent refinement to dynamic memory management, when it caused memory corruption (reported as error 3) when a function pass dynamic variables to an SBX, which in turn called a function. 2. --- Correction to the Italian version of the Edit menu - the Paste option was listed as Taglia (cut) rather than Incolla. ========================================================================== A-Shell Development Notes Version 5.1.1164.2 (25 October 2009) ========================================================================== 1. --- Further AUI_EVENTWAIT refinement (to 1164.1) to fix a backwards compatibility problem in which EVW_EXCDINOUT stopped working in the main window and in the first event wait for a new dialog. Note that in order to put the focus on a clickable control at the start of a new dialog, you will need to remove EVW_EXCDINOUT to the first call. ========================================================================== A-Shell Development Notes Version 5.1.1164.1 (23 October 2009) ========================================================================== 1. --- XTREE bug fix: Control+HOME and Control+END were not working properly when in checkbox cells. 2. --- AUI_EVENTWAIT enhancement: it is now "smarter" about deciding when to ignore EVW_EXCDINOUT and when not to. Previously, it would ignore it (i.e. wait for another event) when either there had been a focus change to another dialog within the current A-Shell session since the last eventwait, or if in-coming exitcode was the same as the last outgoing exitcode. That handled the two most typical cases where you would want to wait for an event even if the in-coming exitcode identifies a clickable control: 1) on the first eventwait in a new dialog, and when returning to a dialog after handling another dialog. The problem which the previous scheme didn't handle was the case where you deliberately wanted to fire off the event associated with a clickable control after returning from some other dialog. The new logic keeps track of the last exitcode for each parent window, and only ignores the EVW_EXCDINOUT flag when the in-coming event is the same as the last out-going event. ========================================================================== A-Shell Development Notes Version 5.1.1164.0 (23 October 2009) ========================================================================== 1. --- AUI_CONTROL enhancement: A chr(13) character embedded in the text of a button (MBF_BUTTON) will now automatically enable multi-line mode (eliminating the need to remember to set MBF_WRAP at the same time). 2. --- MBF2_STATICWIN bug fix: In the initial implementation (1162) the flag was incorrectly being tested for in the ctype parameter rather the ctype2 parameter. 3. --- ATE server-based licensing improvements: Extend the timeout for the initial ATE handshake from 3 seconds to 8 seconds, in order to be more tolerant of connections with high latency or other intermittent pauses. 4. --- ATE enhancement: new pseudo-environment variable ATELICMODE supported in TAB(-10,AG_GETENV) to return a single decimal value containing flags indicating how the ATE workstation was licensed. The bottom 8 bits of the value are 0 if successfully licensed, else one of the LICF_xxx flags from ashinc:ashell.def. The next byte(s) contain one or more bit flags from ATELF_xxx: - ATELF_PROTO (&h0100) - Indicates that the ATE handshake was initiated, and also that the ATE client is at least 5.1.1164.0. (Prior to that, the TAB(-10,AG_GETENV);"ATELICMODE";chr(127) command will return an empty string. - ATELF_PC (&h0200) - Indicates that the ATE client has a local license. - ATELF_SRV1 (&h0400) - Indicates that the server attempted to pass the ATE license via the new streamlined protocol (1162+) - ATELF_SRV2 (&h0800) - Indicates that the server attempted to pass the ATE license via the LICENS/ATESRV mechanism. This also implies that the server is less than 5.1.1162.0 and/or that the passed license wasn't valid (in which case the lower byte should be <>0). - ATELF_AUX (&h1000) - Indicates that the server attempted to pass an auxiliary license to the client. (Will always be combined with ATELF_SRV2.) ========================================================================== A-Shell Development Notes Version 5.1.1163.2 (20 October 2009) ========================================================================== 1. --- INPUT CSV refinements to better handle cases involving unusual, non-standard, or mismatched quote syntax. Note that the AF_CSVSMARTQUOTE flag no longer does anything (and should be removed from the documentation.) AF_CSVNOQUOTE flag now stifles the automatic removal of the outer quotes surrounding a field. 2. --- Dynamic variable bug fix: assigning new value to a string variable that was previously 1 byte longer was sometimes failing to properly terminate the new value (leaving the last byte of the old value). 3. --- INPUT statement bug fix: the internal input buffer was getting corrupted during expansion to accomodate CSV fields longer than 4K. ========================================================================== A-Shell Development Notes Version 5.1.1163.1 (18 October 2009) ========================================================================== 1. --- XTREE date picker refinement: XTREE now parses the data in date cells based on the order of the day and month in the Format= clause, rather than on the local LDF setting. This should eliminate problems confusing and/or reversing the day and month when a date cell transitions between display and edit mode (since the transition requires that the cell's text contents be parsed into the sub-fields used by the date picker). ========================================================================== A-Shell Development Notes Version 5.1.1163.0 (16 October 2009) ========================================================================== 1. --- AUI_CONTROL enhancement: TAB controls may now be nested inside TAB controls. 2. --- STRTOK.SBR enhancement: new opcode flag +4 enables "CSV mode", which attempts to parse the source string as if it were comma separated (CSV) or TAB separated fields. This mode is similar to the existing quoted mode (+2), but with following differences: - While +2 mode recognizes quoted sub-fields anywhere within a field, +4 (CSV) mode only considers quotes as possible delimiters if the first non-blank character in the field is a quote. Any quotes which occur mid-field are treated as data characters. A subsequent quote will only be considered as the trailing quote of the field if it is followed by a field or record delimiter. - Leading and trailing spaces are removed from the returned field - Pairs of adjacent double-quote characters ("") are coalesced into single ones, i.e. 6"" Banana becomes 6" Banana. 3. --- INPUT CSV was crashing with some kinds of badly matched quote patterns. 4. --- XTREE bug fix: the editable date picker cell resizing logic may have gotten stuck in an infinite loop in cases where the optimum cell width caused a couple of pixels of the column to be outside the scroll window. 5. --- File allocation adjustment: When OPTIONS=BRKALC, it now outputs all brackets (]]]]]) to the file. Previously, it output "MIAME" after every 27 brackets. This was useful in some cases for visually confirming that the file was allocated by A-Shell, but undermined one of the purposes of filling a new file with brackets (to make unwritten records sort to the end). ========================================================================== A-Shell Development Notes Version 5.1.1162.2 (15 October 2009) ========================================================================== 1. --- XTREE date picker bug fix: date selection from the calendar using the mouse wasn't working; neither was ALT+DOWN to display the dropdown. ========================================================================== A-Shell Development Notes Version 5.1.1162.1 (14 October 2009) ========================================================================== 1. --- Windows sequential input file handler was treating chr(26) as EOF. ========================================================================== A-Shell Development Notes Version 5.1.1162.0 (13 October 2009) ========================================================================== 1. --- AUI_CONTROL enhancement: New ctype2 flag MBF2_STATICWIN creates a static child control window that looks something like a dialog box but can be used as a variation of a groupbox. 2. --- ATE licensing protocol enhancement: The protocol for passing the server's ATE license to the ATE client on A-Shell startup has been streamlined in the case where the server has a "system" ATE license (meaning that ATE is allowed on all client connections). The new protocol only has an effect when both the server and client are running 5.1.1164.0+, but does not interfere when either side is older. When in effect, the job is no longer forced to execute LICENS/ATESRV to issue the license, with eliminates a few handshaking steps, speeding up the login and possibly avoiding some problems with slow connections and typeahead during complicated startup sequences. 3. --- XTREE Enhancement: New advanced coldef clause Footer= allows you to specify a pager footer to be used when printing an XTREE through the print/preview mechanism. Syntax is like Title= clause (see 1160.8): Footer=Left Text Footer=Left Text|Right Text Footer=Left Text|Center Text|Right Text 4. --- VUE refinement: Detect and prevent attemmpt to view directory (within core vue module, not just within standalone VUE executable). ========================================================================== A-Shell Development Notes Version 5.1.1161.2 (12 October 2009) ========================================================================== 1. --- Dynamic memory enhancement: memory pools for SBXs and functions are now organized by nesting level, allowing all memory for levels N+ to be freed when returning from a level N call. This vastly reduces the amount of memory accumulation when the main program spends most of its time within a single top-level SBX or function that in turn makes heavy use of nested SBX/function calls and dynamic memory. 2. --- Dynamic memory bug fix: Close a loophole in the 1161.1 refinement that was allowing one string to spill over into the next when a fixed string with no trailing null was passed as a parameter to a routine receiving in into a dynamic string. 3. --- Dynamic memory bug fix: Remove spurious "out of memory" error caused by assigning a null value to a dynamic string during parameter passing. 4. --- MIAME.INI processing refinement: INCLUDE= was not translating pseudo- %ENV% variables (such as %MIAME%) that are known to A-Shell but not Windows. 5. --- AUI_CONTROL bug fix: The dialog class used for MBF_DLGNOPARENT and CMF2_DLGICON was inadvertently deleted in 1161.0. ========================================================================== A-Shell Development Notes Version 5.1.1161.1 (09 October 2009) ========================================================================== 1. --- Dynamic memory refinement: strings are now always stored with a trailing null. (Previously it was typical but not guaranteed.) The null avoids problems with some SBRs which pass string arguments to C API routines expecting trailing nulls. 2. --- XPUTARG/XGETARG refinement: When copying from a string source parameter to a dynamic X destination parameter, the X variable is now sized to match the logical (rather than the physical) size of the source string. This matches what happens in an assignment statement. ========================================================================== A-Shell Development Notes Version 5.1.1161.0 (09 October 2009) ========================================================================== 1. --- Runtime bug fix: RUN modules compiled with /AV/X:2 containing dynamic variables (which have the header flag F1F6 according to VERSYS) were not being recognized as valid by the program loader, resulting in "Incompatible run module". ========================================================================== A-Shell Development Notes Version 5.1.1160.9 (08 October 2009) ========================================================================== 1. --- Dynamic memory refinement: Previously, when an X variable was assigned a new value that was shorter than the previously allocated size, the variable size was not changed. That was a marginally useful optimization, but ended up conflicting with a more useful characteristic of dynamic X variables when they are concatenated together. Concatenation of dynamic X variables now acts like you would expect. ========================================================================== A-Shell Development Notes Version 5.1.1160.8 (06 October 2009) ========================================================================== 1. --- XTREE enhancement: Title= coldef clause now supports one or two "|" delimiters to separate it into Left|Center|Right. If no delimiters, the text is used as the right title, and the default left title is the date. If one delimiter, it is treated as Left|Right. ========================================================================== A-Shell Development Notes Version 5.1.1160.7 (06 October 2009) ========================================================================== 1. --- EMASCB.SBR bug fix: opening the file was generating intermittent spurious errors (like #17 "file exists"). ========================================================================== A-Shell Development Notes Version 5.1.1160.6 (06 October 2009) ========================================================================== 1. --- Server-side ATE refinement: close a loophole which was causing ATE to get stuck in keyboard lock mode after certain sequences of events. ========================================================================== A-Shell Development Notes Version 5.1.1160.5 (05 October 2009) ========================================================================== 1. --- XTREE bug fix: exiting from an editable cell with validation wasn't setting xtr'xvalidate when the exit was triggered by a function key or ESC/ENTESC. 2. --- ISAM 1.1 bug fix: In rare cases involving keys with more than 3 levels, a deletion was failing to update affected mid-level nodes, leading to keys that could be located by a sequential search but not by direct lookup. (This problem was actually introduced in 1142.4 in conjunction with a patch for a similar problem.) ========================================================================== A-Shell Development Notes Version 5.1.1160.4 (05 October 2009) ========================================================================== 1. --- Windows printing bug fix: SPOOL.SBR landscape switch (32768) stopped working in 5.1.1157 2. --- AUI_CONTROL enhancement: you may now override the background color of TAB controls, by the usual method of either specifying an RGB value or a palette number + 64. Note, however, that the background color does not affect the tab labels; it only affects the main part of the panel. (That may be desirable or undesirable, depending on your aesthetic viewpoint.) ========================================================================== A-Shell Development Notes Version 5.1.1160.3 (01 October 2009) ========================================================================== 1. --- XTREE print preview wasn't remembering the page layout or the printer saved from the previous print preview. ========================================================================== A-Shell Development Notes Version 5.1.1160.1 (30 September 2009) ========================================================================== 1. --- Faxing bug fix: eliminate two spurious error message dialogs during fax printing. (These started around 5.1.1158). ========================================================================== A-Shell Development Notes Version 5.1.1160.0 (28 September 2009) ========================================================================== [see Compatibility warning under 1159.9!] 1. --- Compiler refinement (edit 442) : COMPIL command line with no arguments now displays the internal compiler version. (Note that this is the version that matters; the version of COMPIL.LIT itself only relates to the wrapper, not to the compiler itself, which is internal to A-Shell) 2. --- Compiler refinement (edit 442) : ++EXTERN references to dynamic variables is now supported. Previously these would generate an error. For example: MAP1 DVAR,S,0 MAP1 VARY(15),S,0 .... Procedure MyProc() ++EXTERN DVAR ++EXTERN VARY() 3. --- Compiler refinement (edit 422) : Attempts to overlay dynamic variables are now flagged as incompatible overlay errors. 4. --- ASQL refinement: The connector interface (via XCALL SQL) has been modified to support dynamic variables. This will require new connectors with version 1.3 or higher. The 1.2 connectors are only compatible with A-Shell 5.1 versions PRIOR TO 1159. 5. --- XGETARG / XPUTARG bug fix: Conversions from floating point to string were resulting in loss of the fractional component of the original floating point value. 6. --- Dynamic variables bug fix: close an obscure GPF loophole. 7. --- XTREE Enhancement: ExitChars= are now operational from within checkbox and radio button cells. However, only the alphabetic, numeric and standard control characters are available in that context. (<, >, ?, =, :, and ; are not available). ========================================================================== A-Shell Development Notes Version 5.1.1159.9 (24 September 2009) ========================================================================== 1. --- COMPATIBILITY WARNING: Any program using dynamic variables which was compiled under 5.1.1159.x must be recompiled for 1160+!!!! To help enforce this, the RUN header flag indicating that the program contains dynamic variables has been changed, such that any such programs compiled under 5.1.1159 will abort immediately with "incompatible RUN format". 2. --- VERSYS.LIT 3.0(107) modified to support the new run header bit indicating that the program uses dynamic variables. It will now identify those programs compiled under 1159 as "5.1.1159 only", and newer ones as "5.1.1160+". 3. --- Refinements to the following subroutines to support returning data into dynamic variables (such that they expand as needed). Previously, the output data was being truncated to the current size of the variable (0 for uninitialized). ACCEPN ACCEPT INFLD (entry) INVUE (entry) LOG (dev$, p$, pn$) MIAMEX, MX_NXTCMD (cmdline) MIAMEX, MX_GETCISAM (version) MIAMEX, MX_GETGDO (g0, ... g9) MIAMEX, MX_XCBDATAX (should be replaced by xgetarg, xputarg anyway) MIAMEX, MX_CLIPBOARD (opcode 0 into text) MIAMEX, MX_REGISTRY, MX_READ MIAMEX, MX_REGISTRY, MX_ENUMKEYS MIAMEX, MX_REGISTRY, MX_ENUMVALS MIAMEX, MX_FINDWINDOW TINKEY XPPN (device, job, trmdef) Note that virtually all other documented subroutines already supported dynamic variables; the ones listed above had special issues. The one well-known exception is XTEXT, where the dst parameter does not currently recognize dynamic variables (even though they might be particularly handy there). 4. --- MX_FINDWINDOW refinement: It now returns updated title and class info into the respective variables, as indicated in the documentation. ========================================================================== A-Shell Development Notes Version 5.1.1159.7 (18 September 2009) ========================================================================== 1. --- Dynamic variable refinement: Reset the allocation unit (initial size of pool and amount by which it gets expanded) when resetting the pool. Previously, if a pool grew very large, the enlarged allocation unit was being used to recreate new pools even after the initial pool was freed (essentially wasting memory and/or making dynamic memory operations less efficient after a period of heavy expansion). ========================================================================== A-Shell Development Notes Version 5.1.1159.6 (18 September 2009) ========================================================================== 1. --- Dynamic variable bug fix: Close a spurious out-of-memory condition in XPUTARG. 2. --- Dynamic variable bug fix: XGETARG may have retrieved garbage in case where target (local) variable was fixed, but source was dynamic, if the memory pool had moved since the XCALL began. (Rare but possible.) ========================================================================== A-Shell Development Notes Version 5.1.1159.5 (18 September 2009) ========================================================================== 1. --- Dynamic variables bug fixes: multiple problems involving dynamic variables and nested sbxs, functions and procedures were resolved. 2. --- GETVER.SBR wasn't working when the passed variable was an uninitialized dynamic string. ========================================================================== A-Shell Development Notes Version 5.1.1159.4 (15 September 2009) ========================================================================== 1. --- Windows printing bug fix: previous fix in 1159.3 was causing printing to abort with file not found under certain conditions (file was being deleted too soon). ========================================================================== A-Shell Development Notes Version 5.1.1159.3 (09 September 2009) ========================================================================== 1. --- Windows printing bug fix: DELETE switch was not working in combination with preview and several GDI directives. 1========================================================================= A-Shell Development Notes Version 5.1.1159.2 (08 September 2009) ========================================================================== 1. --- Add current status (current fg/bg color numbers, Rev and Dim indications) to Colours dialog. ========================================================================== A-Shell Development Notes Version 5.1.1159.1 (04 September 2009) ========================================================================== 1. --- Fix various bugs with implementation of dynamic variables relating to arrays, DIMX, and REDIMX. Also, refine dynamic variable memory allocation plan (now doubles up to 64K, then increases by 25% each time). 2. --- INPUT bug fix: very long input lines were being effectively truncated at about 16K in length. There should be no specific limit now. ========================================================================== A-Shell Development Notes Version 5.1.1159.0 (03 September 2009) ========================================================================== 1. --- Introduce preliminary support for dynamically sized S and X variables. (This should be considered very much "beta", as the implementation "touched" many parts of the core variable handling logic and needs more field testing before it can be deemed safe for production.) To declare a dynamic variable, assign it an explicit size of zero, e.g.: MAP1 STRING,S,0 ! dynamically sized string MAP1 UNF,X,0 ! dynamically sized unformatted MAP1 DARY(75),S,0 ! fixed-length array of dynamic strings MAP1 XARY(24,9),X,0 ! fixed-length array of dynamic unformatted NOTE 1: Dynamic variables may only be declared at the MAP1 level. NOTE 2: An array may be made up of dynamic elements, but the range of index values for the array remains fixed. However, you may use DIMX and REDIMX to dynamically allocate and resize such as array, e.g. DIMX ZARY(A,B,C),S,0 REDIMX ZARY(A*2,B,C) (Redimensioning an array doesn't preserve the original contents unless only the first dimension changes, as in the example above.) Dynamic variables may also be used in function and procedure parameter lists, as well as for the return value of a function, i.e.: Function Fn'Test$(a$ as s0) as s0 Dynamic variables (and array elements) initially take up 8 bytes of storage memory (used as a descriptor), so it won't make much sense to use them if they aren't going to expand beyond 8 bytes. When an assignment is made to the variable, either via an assignment (e.g. STRING = "abc"), INPUT statement, or via an XCALL, Function, or Procedure, the variable will be expanded as needed to contain the data. If referenced in an expression before any value is assigned, they act like null strings. NOTE 3: It is not wise to use INPUT RAW with dynamic X variables, since the amount of data input depends on the current size of the variable, which would be 0 initially, but could be anything later (after some other kind of assignment). As currently implemented, the internal memory allocated to a variable does not shrink, so first assigning a large amount of data and later assigning a small amount does not free memory. (This may change as the implementation evolves.) Two pools of dynamic variable memory are maintained - one for global or persistent program variables, and one for automatic (aka local or stack) variables (i.e. within functions and procedures). Both are allowed to grow without any particular limit during the execution of a program, but are cleared (and the memory freed) when the program terminates. To compile programs with dynamic variables, you must use compiler edit 439+, and the /X:2 switch. Any legally compiled program containing dynamic variables will receive a new RUN header value of 0xF167 or 0xF1E7 (if /av), and will generate a "?RUN file incompatible" error if executed under any A-Shell runtime prior to 5.1.1159. Programs which do not contain dynamic variables should continue to compile and run exactly as before. 2. --- VERSYS.LIT 3.0(106) now recognizes the 0xF167 and 0xF1E7 run headers and reports them as requiring 5.1.1159+. It also now reports the header and compatibility status for SBXs (as well as RUNs and LITs). 3. --- GUI enhancement: Increase max length of menu item descriptions from 32 to 64 characters. 4. --- GUI bug fix: Fix problems with images getting distorted after resizing (minimizing/maximizing/restoring) the window. ========================================================================== A-Shell Development Notes Version 5.1.1158.5 (31 August 2009) ========================================================================== 1. --- ERSATZ system bug fix: ersatz name matching was ignored the characters beyond the first six, causing names longer than 6 characters to never be found unless unique in the first 6 characters. ========================================================================== A-Shell Development Notes Version 5.1.1158.4 (28 August 2009) ========================================================================== 1. --- XTREE bug fix: default fg/bg colors were sometimes getting set almost randomly. ========================================================================== A-Shell Development Notes Version 5.1.1158.3 (27 August 2009) ========================================================================== 1. --- Command file processing refinement: don't echo INPUT chars taken from the command file to the screen if NOECHO mode has been set. 2. --- Eliminate an intermittent spurious blank line output between the echoing of the initial command line and the next real output line. ========================================================================== A-Shell Development Notes Version 5.1.1158.2 (26 August 2009) ========================================================================== 1. --- Compiler bug fix!!!! - Compiler edit 437 (A-Shell 5.1.1157.0) introduced a bug in which references to unmapped variables within ++include files auto-mapped the variables as private to the the module, rather than global. Thus if the variable was first assigned a value within the ++include file, that value would not be visible when the same variable was accessed in the main file. 2. --- XTREE bug fix: When XTR'COLUMNSORT(0) was not zero (in order to force XTREE to initially sort the items), but XTF_SORT was not specified (so that the user could not re-sort them), the index to the selected row was not taking the sort into account. (It was returning the index relative to the items as displayed, not relative to the items as stored.) ========================================================================== A-Shell Development Notes Version 5.1.1158.1 (25 August 2009) ========================================================================== 1. --- New GDI printing command: //PAPERSIZE, Putting this command near the top of the first page of the file is equivalent to having PAPERSIZE = in the printer init file (see 5.1.1157 below). Note that as with the printer init PAPERSIZE command, the parameter may either be one of the symbolic names, or the equivalent numeric value. For example, the following two are equivalent. //PAPERSIZE,LEGAL //PAPERSIZE,5 One way to get the numeric equivalents is to activate the LP trace and print a file containing any //PAPERSIZE command; this will cause all the supported paper size names (and numbers) to be listed in the log or debug window. ========================================================================== A-Shell Development Notes Version 5.1.1158.0 (21 August 2009) ========================================================================== 1. --- XTREE enhancement: editable date and time fields can now use the Windows date/time picker control for editing, instead of the standard edit control. You can enable and configure the new editing method via one or both of the following: InfDef=D (in conjunction with a D column, i.e. date) InfDef=t (in conjunction with an h column, i.e time) For example: Coldef = "1~8~Date~DE~InfDef=D~~" You can make the date optional by specifying the "O" (optional) code in your InfDef string, i.e. InfDef=DO (Note that the InfDef clause is shared by all columns, so this method forces you to treat all editable date and time columns the same way.) In the above example, since the column width is 8, the format will be set to MM/DD/YY (or DD/MM/YY depending on the LDF). Otherwise the year would be returned in CCYY format. The other method for activating or configuring the date/time picker control is to specify a new advanced coldef parameter: Format= This clause is local to the column, and so does allow you different date editing options for different columns. Whenever there is a Format= clause defined for an editable date or time column, the date/time picker control will be used instead of the regular edit control. The is made up of the following special characters/fields; any other characters are treated as literals: d one or two digit day dd two digit day (zero padded) h one or two digit hour in 12-hour format hh two digit hour in 12-hour format H one or two digit hour in 24-hour format HH two digit hour in 24-hour format m one or two digit minute mm two digit minute M one or two digit month number MM two digit month number t one letter AM/PM abbreviation tt two letter AM/PM y one or two digit year yy two digit year yyy full four digit year For example: Coldef = "1~15~Date/Time~DE~Format=dd/MM/yyy HH:mm~~" The contents of that column should then look something like this: 08/15/2009 13:21 Note that in columns containing both time and date, you should use the cformat code D but not h. (Use h only when the column contains only a time.) Warning: if you supply date/time data in a format that doesn't match the defined format (including blank data) OR isn't compatible with IDTIM.SBR, the date/time picker will not be able to interpret your data. In such a case, if your InfDef clause contains "O" (for optional), the date/time picker will most likely replace your bad or empty data with the current date/time. Unfortunately this limits the format flexibility otherwise provided by the Format clause. (Future enhancements may allow for some additional time/date formats, but for now you are pretty much limited to numeric date format with slash or dash delimiters. If you need more flexibility than that, stick with the regular edit mode for dates.) ========================================================================== A-Shell Development Notes Version 5.1.1157.0 (19 August 2009) ========================================================================== 1. --- Windows printing enhancement: support for a new printer init command PAPERSIZE = where can be any of the following standard size names: LETTER, LEGAL, TABLOID, LEDGER, LEGAL, STATEMENT, EXECUTIVE, A3, A4, A4SMALL, A5, B4, B5, FOLIO, QUARTO, 10X14, 11X17, NOTE, ENV_9, ENV_10, ENV_11, ENV_12, ENV_14, CSHEET, DSHEET, ESHEET, ENV_DL, ENV_C3, ENV_C4, ENV_C5, ENV_C65, ENV_B4, ENV_B5, ENV_B6, ENV_ITALY, ENV_MONARCH, ENV_PERSONAL, FANFOLD_US, FANFOLD_STD_GERMAN, FANFOLD_LGL_GERMAN, ISO_B4, JAPANESE_POSTCARD, 9X11, 10X11, 15X11, ENV_INVITE, RESERVED_48, RESERVED_49, LETTER_EXTRA, LEGAL_EXTRA, TABLOID_EXTRA, A4_EXTRA, LETTER_TRANVERSE, A4_TRANSVERSE, LETTER_EXTRA_TRANSVERSE, A_PLUS, B_PLUS, LETTER_PLUS, A4_PLUS, A5_TRANSVERSE, B5_TRANSVERSE, A3_EXTRA, A5_EXTRA, B5_EXTRA, A2, A3_TRANVERSE, A3_EXTRA_TRANSVERSE, DBL_JAPANESE_POSTCARD, A6, JENV_KAKU2, JENV_KAKU3, JENV_CHOU3, JENV_CHOU4, LETTER_ROTATED, A3_ROATED, A4_ROTATED, A5_ROTATED, B4_JIS_ROATED, B5_JIS_ROTATED, JAPANESE_POSTCARD_ROTATED, DBS_JAPANESE_POSTCARD_ROTATED, A6_ROTATED, JENV_KAKU2_ROTATED, JENV_KAKU3_ROTATED, JENV_CHOU4_ROTATED, B6_JIS, B6_JIS_ROTATED, 12X11, JENV_YOU4, JENV_YOU4_ROTATED, P16K, P32K, P32KBIG, PENV_1, PENV_2, PENV_3, PENV_4, PENV_5, PENV_6, PENV_7, PENV_8, PENV_9, PENV_10, P16K_ROTATED, P32K_ROTATED, PENV_1_ROTATED, PENV_2_ROTATED, PENV_3_ROTATED, PENV_4_ROTATED, PENV_5_ROTATED, PENV_6_ROTATED, PENV_7_ROTATED, PENV_8_ROTATED, PENV_9_ROTATED, PENV_10_ROTATED If that list is too limiting, you can also specify the numeric code corresponding to the paper size. (You can retrieve the list of supported paper sizes in symbolic and numeric format by printing with the LP trace turned on.) PAPERSIZE acts as a kind of alternative to the BIN command, in that in that A-Shell passes the request to the printer with the hopes that the printer will select the bin which contains the requested size. (Most printers claim to support this capability, although the degree of support is questionable, and it may require that you first activate the feature through the printer's control panel or properties dialog. Similarly, it is almost always necessary for you to inform the printer of the size of paper you have in each bin (although perhaps there are some higher-end printers which have bins containing sensors to auto- detect the size.) As with the BIN command, the printer may indicate "support" for more bins (and more paper sizes) than are actually "available", and A-Shell doesn't do much enforcement. (An upcoming feature will instruct A-Shell to prompt the user if the desired paper does not appear to be available, but for the moment, A-Shell just assumes that it is.) So the main effect of specifying PAPERSIZE in the printer init file is to force A-Shell to use that paper size to base any size-dependent calculations affecting the format or spacing of the output ((as will APEX). ***WARNING: The process of working on the PAPERSIZE feature involved rewriting a lot of the existing Windows printing code, so developers and administrators would be well-advised to do some small-scale testing (or wait for others to do so) before distributing this update widely to end-users. 2. --- APEX refinement: Title bar of APEX window now displays the printer name and paper size being used for the preview context. 3. --- New 6.5 version of the XTREE control released (SftTree_IX86_A_65.dll) replaces the previous 6.0 version (SftTree_IX86_A_60.dll). The old dll will no longer work (you'll get a "Unable to load library" error if the new version is not present. New features have yet to be addressed (mostly it improves compatibility with Windows 7), except for the minor enhancement described next: 4. --- XTREE enhancement: double-clicking on the border between columns will now optimize the width of the column to the left (as in Excel), provided the column is not locked. 5. --- XTREE enhancement: New flag (in ashinc:xtree.def) will auto-expand the columns to fill the width of the tree control, eliminating the blank space that will otherwise appear when XTR'CLOSEDENDED=1 and the overall tree control is wider than it needs to be for the current data. define XTF2_AUTOEXPCOL= &h00000010 ! Auto Expand Columns to fill control The expansion operation increases the width of the visible columns by a uniform percentage rather than by a fixed number of pixels, thus preserving the relative widths. The last column will pick up any extra pixels left over from rounding and if there is no vertical scroll bar. The flag is ignored in split (XTF2_SPLIT) and open-ended (XTR'CLOSEDENDED=0) controls. 6. --- Compiler bug fix (edit 437) - references to PRIVATE variables were not being handled properly when not inside a function or procedure. Also, unmapped variables used to specify the dimensions of a PRIVATE DIMX statement were not being reported as compiler errors. 7. --- VUE (295) enhancement: VUE now automatically registers the equivalent of "PUSH 9" whenever leaving the current row (i.e. due to up/down arrow, page up/down, home/end, next match, etc.), allowing you to return with >POP 9. (Particularly useful if when searching to return to the prior match, or whenever you accidentally hit the HOME or END key.) 8. --- XTREE enhancement: support for CSV format as a variation of file mode. To indicate that the input file is in CSV format, a new flag has been defined (see notes for 1146.0 for info on mapping the second flags word): define XTF2_CSV = &h00000020 The are several variations on how columns and other attributes can be defined: - If you do not specify a column definition string in COLDEF (XTF_COLDFX), XTREE will auto-define columns based on the number of fields in the first row of the CSV file. (Currently it sets them all to a generic string type, although perhaps in the future an attempt will be made to auto-detect numeric and date columns). In the typical case, XTREE assumes that the first row of the CSV file contains the column names, which will be used to build the XTREE column headers. If your CSV does not contain such a header row, you can specify XTR'HIDEHEADER=1 (in XTRCTL), in which case the first row will be treated as data, and there will be no column headers. - You may specify your own column definitions using the standard COLDEF syntax, either in the CSV file itself (in which case set XTF_FCOLDEF and XTF_COLDFX), or in the COLDEF parameter (in which case set XTF_COLDFX as you would normally). However, note that if any real columns are defined, then only those columns will be properly recognized during the load operation. You may choose to define only pseudo-columns (with cpos=0 and cwidth=0, i.e. "0~0~x~H~...~~") in order to define other attributes, such as colors, fonts, popup menus, etc., in which case the actual column definitions will be auto-generated as in the first case described above. Note that whenever any real columns are defined using the advanced coldef syntax (in either COLDEF or in the file), it is assumed that there is no other header row in the file. If there is, use the skip syntax described below to skip over it. - To skip over lines at the top of the file, you can begin your COLDEF parameter with a {-skipval} clause as documented with 5.1.1115 or http://www.microsabio.net/dist/51dev/doc/ashdevnotes/coldefenhancement.htm Note that when XTF2_CSV is specified, the {-skipval} clause does not require XTF_FCOLDEF (i.e. doesn't require any column definitions in the data file), and it doesn't have to be followed by "+" or "=" and a valid coldef definition. So in other words, you can skip lines by starting the COLDEF parameter with a {-skipval} clause, whether or not you use any other COLDEF features. Examples: Assume the CSV file looks like this and that we are specifying the XTF2_CSV flag in all cases: Account,Name,Transaction Date,Amount 12345,"Smith,Fred",08/15/09,999.12 12346,"Jones,Jane",08/16/09,100.00 If COLDEF="", and neither the XTF_COLDFX nor XTF_FCOLDEF flags are set, XTREE will recognize and display 4 columns of data, creating headers from the first line. If XTR'HIDEHEADER=1, then it would treat the first line above as data, rather than as headers, and no header bar would be created. If XTF_COLDFX is set and COLDEF="-1", then it would skip the first line. (When skipping, even if XTR'HIDEHEADER=0, there will still be no header bar unless the COLDEF string contains real column definitions.) If COLDEF="0~0~x~H~HdrScale=200~~" (and XTF_COLDFX set), then the header scale will be set to 200, but the headers and column information will still be taking from the file (because the COLDEF does not define any real columns). If COLDEF="-1=1~1~Acct#~#~~2~1~Name~S~~3~1~Date~D~4~1~Amount~#~~", then the first line of the data file will be skipped (due to the "-1=" at the start of the COLDEF, and the columns will be defined by the COLDEF string in the normal way, except that due to the XTF2_CSV flag, the cpos and cwidth parameters do not matter (but must be >0). By convention, we have specified cpos values which equate to the field number, but there is currently no way to rearrange the columns with this technique. If we replaced the standard CSV header line at the top of the CSV file with a COLDEF string, as follows: 1~1~Acct#~#~~2~1~Name~S~~3~1~Date~D~4~1~Amount~#~~ 12345,"Smith,Fred",08/15/09,999.12 12346,"Jones,Jane",08/16/09,100.00 Then we could specify XTF_FCOLDEF and XTF_COLDFX to have XTREE retrieve the column definitons from the file. Optionally, we could add to the column definitons by setting the COLDEF parameter to "+" followed by a legal set of column definitions (presumably pseudo-columns in this example). 9. --- XTREE bug fix: Sorting in date columns (particularly when one or more items also had a time component) was not properly handling items where the date and/or time was blank. Also, in D/M/Y mode, times were always sorting ascending even when dates were descending. 10. --- GUI debugging enhancement: Control+Shift+DblLeftClick may now be used as an alternative to Control+Shift+DblRightClick (or +DblMiddleClick) to bring up the GUI Control dialog (to access the control dump & trace window.) (This solves a problem where the existence of a context menu interfered with the operation of the double-right-click.) 11. --- ATE bug fix: under some circumstances, when no Ftp login information was included in the profile, A-Shell was copying the telnet/ssh login information to it incorrectly such that the Ftp name was being filled in with the (encrypted) password. Not only did this mess up Ftp but caused the ATE configuration dialog to fail to create the Ftp name field so it could be edited. (If you have a profile with this problem, you may need to delete and re-create it.) ========================================================================== A-Shell Development Notes Version 5.1.1156.1 (03 August 2009) ========================================================================== 1. --- XTREE bug fix: the previous patch in 1155.8 to auto-expand the row header column was not working in some cases involving multi-level trees. ========================================================================== A-Shell Development Notes Version 5.1.1156.0 (31 July 2009) ========================================================================== 1. --- XTREE enhancement: XTROP_PRINT can now be used directly, without first creating the control. 2. --- XTREE enhancement: New flags (in ashinc:xtree.def) allow the orientation of the xtree print/preview operation to be forced: define XTF2_PORTRAIT = &h00000004 define XTF2_LANDSCAPE = &h00000008 3. --- XTREE enhancement: New advanced coldef clause VertAlign= may be used to alter the vertical alignment of text within cells from the default of center to TOP or BOTTOM. Syntax (not case sensitive): VertAlign=TOP VertAlign=BOTTOM Note that this only applies when ITEMLINES > 1. Also note that if VertAlign is applied to the zero column, it becomes the default for all the columns. Otherwise the clause only affects the current column. 4. --- ASTART.CMD[2,2] is no longer overwritten by the installer/updater. 5. --- AUI_MENU bug fix: deleting context menus was not freeing up the used space in the menu table, leading to an overflow of the table (the only symptom of which may have been that partial or invisible menus). 6. --- New command line switch to override user name: -uo launchname When specified, it creates a new entry in the existing hierarchy of user names: APP user (name specified by app via MX_SETUSRNAM) LAUNCH user (name specified on command line with -uo) REAL user (the name used to login in to the OS*) *Note that under UNIX, the REAL user could also be the "effective" effective" user (i.e. the owner of the ashell executable if the +s flag is set). See OPTIONS=EFFUSR for information on how the various routines that return user name decide between those two.) The REAL user name is always defined (since you need it to log in to the host OS. The other two levels are optional, but default to the level below it. For example, if you don't specify the -uo switch, then the LAUNCH user will be the same as the REAL user. To bypass the normal hierarchy and retrieve the LAUNCH or REAL user name directly, you can pass either "!" or "!!" to GETUSN.SBR, e.g.: USER$ = "!" XCALL GETUSN,USER$ ! returns LAUNCH user in USER$ USER$ = "!!" XCALL GETUSN,USER$ ! returns REAL user in USER$ (The "!!" option is new as of this release; the "!" was introduced long ago.) Note that XCALL MIAMEX,MX_SETUSRNAM,"" (reset application user name) will effectively reset it to the LAUNCH user. The only way for an application to force the APP user name to the REAL user (overriding the LAUNCH user) would be to retrieve the REAL name with the GETUSN "!!" method, and then use MX_SETUSRNAM to set the APP user to match the REAL user. 7. --- ATE tracing refinement: Tracing of aux printing operations is now more complete. (Requires ATE and GDIPRT trace flags be set). ========================================================================== A-Shell Development Notes Version 5.1.1155.9 (30 July 2009) ========================================================================== 1. --- AUI_CONTROL bug fix: MBF2_PIXSIZE wasn't working. (Broken during millicolumn implementation, around 1139). 2. --- AUI_CONTROL / INFLD bug fix: When the ||f TYPE was used and the default GUI control font was set to something other than the default, deleting an INFLD control was sometimes causing the font to be deleted, even when other controls were sharing the same font. (The effect was that those other controls would suddenly change font when given the focus.) 3. --- AUI_IMAGE bug: Certain image scaling options were causing A-Shell to crash when the image belonged to a dialog with a non-standard background color. ========================================================================== A-Shell Development Notes Version 5.1.1155.8 (28 July 2009) ========================================================================== 1. --- XTREE bug fix: the new optional column of row headers (see 1151.0) was not auto-expanding as needed to contain the largest entry (causing line number row headers to be truncated at about 2 digits). ========================================================================== A-Shell Development Notes Version 5.1.1155.7 (25 July 2009) ========================================================================== 1. --- Control creation bugfix: MBST_HCENTER and MBST_VCENTER were not working properly. Dialogs were being centered relative to desktop rather than actual parent and child controls were often placed outside of parent. ========================================================================== A-Shell Development Notes Version 5.1.1155.6 (23 July 2009) ========================================================================== 1. --- Memory allocation bug fix: changing the main partition size with MEMORY.LIT or MX_MEMORY was failing to free the old partition, causing memory usage to accumulate with repeated changes to the memory partition size (until the A-Shell session ended). 2. --- XTREE bug fix: XTROP_PRINT via ATE with file mode was causing extra characters to be sent to the host, leading to unexpected behavior (such as a Control-C abort). (Fix affects only ASHW32.EXE) ========================================================================== A-Shell Development Notes Version 5.1.1155.5 (21 July 2009) ========================================================================== 1. --- VUE (294) bug fix: scrap / undo buffer operations were not handling TABs properly. (The recalled text displayed ok initially, but didn't get saved as displayed.) ========================================================================== A-Shell Development Notes Version 5.1.1155.4(18 July 2009) ========================================================================== 1. --- AMBTOA now allows 8 bit chars. ========================================================================== A-Shell Development Notes Version 5.1.1155.3 (09 July 2009) ========================================================================== 1. --- Windows common dialog refinement: some dialogs, like the File Open, Choose Font, and Choose Printer dialogs, were acting as siblings to the current dialog (if called from a dialog rather than the main window). This was harmless, but could lead to confusion since clicking on the A-Shell dialog would make it appear to be live (and on top of the pop-up dialog), even though it was still waiting on the pop-up dialog. 2. --- ATE refinement: TCRTs 102/103 (start/end underscore reverse) now work. ========================================================================== A-Shell Development Notes Version 5.1.1155.2 (09 July 2009) ========================================================================== 1. --- XTREE refinement: up/down arrows now operate within multi-line editable cells. Previously, they moved cell-to-cell, as they do (and should) for single-line cells. Use Control+arrow to escalate the action from within-cell to cell-to-cell. 2. --- PDFX refinement: //PDFX,Save.FullFileName now distinguishes between paths that have dots in them, and filenames, by whether the dot has a slash to the right of it. For example: treated as a file: //PDFX,Save.FullFileName,\\mydomain.com treated as a directory: //PDFX,Save.FullFileName,\\mydomain.com\ ========================================================================== A-Shell Development Notes Version 5.1.1155.1 (08 July 2009) ========================================================================== 1. --- PDFX bug-fix: Specifying a network path or directory in the //PDFX,Save.FullFileName statement was generating a spurious error message box (about access denied). 2. --- MX_GETOFD / AG_GETOFD bug fix: aborting from File Open or Save dialog which supported multi-select was failing to return a null string (the normal indicator of error). 3. --- XTREE bug fix: The special $RESETCFG action in a PopupMenu was transmitting the string "$RESETCFG" to the app, in addition to what it was supposed to do (i.e. reset the saved column configuration.) (Problem was introduced in 1154.6) ========================================================================== A-Shell Development Notes Version 5.1.1155.0 (07 July 2009) ========================================================================== 1. --- AUI_MENU enhancements: You may now enable/disable and delete internal menu items by their internal command ID value (100-199, see AG_MENU topic in Dev Guide for list), as well as by position. The new method is more robust, since the internal command ID values are not subject to change, like the positions are. 2. --- AUI_MENU enhancements: You may add menu items that act like the internal menu items, using the new mtype flag MBF_MENUID (&h00040000), and putting the string representation of the internal ID value (which must be one of the pre-defined values used by the internal menus and in the range of 100-199) in the Cmd parameter. This technique is useful in cases where you want to remove and later re-add individual internal menu items, or where you want to rearrange some of the internal menu items. For example, to delete File > Exit and add a "New Exit" option to the Settings menu: mnu'exit'id$ = "111" ! internal ID of File > Exit xcall AUI, AUI_MENU, MNUOP_DEL, 1, mnu'exit'id$, 0, 0, "", "", status xcall AUI, AUI_MENU, MNUOP_ADD, 3, "New Exit", MBST_ENABLE, & MBF_MENUID, mnu'exit'id$, "", status Note that the menuid parameters 1 and 3 reference the top level File and Settings menu by position. 3. --- XTREE (ATE server-side) optimization bug fix for problem introduced in 1152.4 (which fixed one optimization issue and create a larger one). ========================================================================== A-Shell Development Notes Version 5.1.1154.7 (02 July 2009) ========================================================================== 1. --- MX_AGWRAPPER refinement (server side): The ATE response timeout period is now automatically set to infinite (rather than the standard 5 seconds) for: AG_XFUNC, AG_XFUNCS, AG_FTP and AG_FTPSYNC. Previously, when these commands took longer than 5 seconds (which is quite common), MX_AGWRAPPER was timing out and returning a null response. To allow further fine-tuning of the timeout, an optional timeout parameter has been added: xcall MIAMEX, MX_AGWRAPPER, AGCMD, PARMS, RESPONSE {,TIMEOUT) The optional TIMEOUT param may specify the maximum wait (in ms) before MX_AGWRAPPER will return with no response. 2. --- XTREE bug fix: the patch in 1154.6 for the answer array optimization with checkboxes was sometimes resulting in disabled checkboxes. 3. --- Windows printing bug fix: a potential for an invalid address reference (possibly leading to a GPF) has been closed. The issue was introduced in 1150.7. ========================================================================== A-Shell Development Notes Version 5.1.1154.6 (01 July 2009) ========================================================================== 1. --- XTREE bug fix (client side): Fix a problem introduced in the answer array optimization logic introduced in 5.1.1150, in which re-entering with an unchanged answer array but a changed data array was causing checkbox cells to revert to plain text numeric cells. 2. --- XTREE refinement: The special context menu commands related to check boxes ($CBSET, $CBRST, etc.) which were introduced in 1150.8 now trigger the exit-for-validation logic. ========================================================================== A-Shell Development Notes Version 5.1.1154.5 (01 July 2009) ========================================================================== 1. --- Printing bug fix: a memory leak was introduced in 1150.7 causing a memory handle to be lost on each print operation. Besides wasting memory, eventually this would lead to a "OUT OF MEMORY HANDLES" error (after about 100 print operations). (Note: an attempted fix for this in 1154.4 didn't work.) ========================================================================== A-Shell Development Notes Version 5.1.1154.4 (30 June 2009) ========================================================================== 1. --- FTP bug fix: the recent change in 1153.1 was causing FTP to fail with an unable to open file error in some cases, when ASHFTPDEBUG set. 2. --- XTREE bug fix: setting XTR'EXPANDLEVEL to 9 wasn't always expanding items at lower levels. ========================================================================== A-Shell Development Notes Version 5.1.1154.2 (27 June 2009) ========================================================================== 1. --- AUI_MENU bug fixes: Nested submenus in the first position of their parent menu were not working properly. Menu deletion was not entirely clean, causing problems if menus repeatedly deleted and re-added. Misc other internal cleanup. 2. --- AUI_MENU debugging feature: Control+Shift+DoubleRightClick menu now has an option to dump the custom menu array to a spreadsheet. The concept is similar to that for the control array. ========================================================================== A-Shell Development Notes Version 5.1.1154.1 (26 June 2009) ========================================================================== 1. --- APEX update: underlying library SftPrintPreview_IX86_A_20.dll upgraded from 2.0.0.1 to 2.0.2.0 (minor internal fixes). 2. --- MIAMEX,MX_OSVER enhancement: now properly identifies Windows 7 (Win7), W2003 Server (WinSvr2003 and WinSvr2003R2), and W2008 Server (WinSvr2008 and WinSvr2008RS). Previously they were identified only by their major and minor version numbers (e.g. Win 6.1). 3. --- AUI_MENU fix: menu icons (from ICO files or icon resources in a DLL) now display properly under pre-Vista versions of Windows (although they always display in the default size of 13x13). Images from BMP files get clipped to 13x13 under XP and prior, so are not recommended (unless you have BMP files that are actually that size or less.) ========================================================================== A-Shell Development Notes Version 5.1.1154.0 (25 June 2009) ========================================================================== 1. --- AUI_MENU enhancement: Menu items may now display images, loaded either from BMP or ICO files, or from bitmap or icon resources inside a DLL. The image is specified by enclosing it in vertical bars i.e.: mnutxt = "Option 1" ! text only mnutxt = "|fspec|Option 2" ! image (from fspec file) + text mnutxt = "|resname::lib|Option 3" ! image (resname within lib.dll) + text You may also specify a desired size in pixels by appending "=##" to the end of the image spec, where ## is a number between 10 and 99. (The images are assumed to be square. If no size is specified, for standalone BMP files, the actual size of the bitmap will be used; for icons, the size will be set to 16x16 (which is the standard size of a menu icon). Best results will be obtained when the actual image size (or, in the case of icons, when one of the available images) matches the target size. In the above examples, fspec may be an AMOS or Windows native style filespec of a BMP or ICO file. (ATE will also look in the two cache directories if not found in the specified location.) resname is the resource name of the image within the specified library, which will be loaded from the same directory where the ashw32.exe was loaded. Examples: mnutxt = "|images:fopen.bmp|Open File" mnutxt = "|help.ico[7,57]=64|Help" mnutxt = "|%MIAME%\images\exit.ico=32|Exit" mnutxt = "|paste::ashico1v|Paste" See the sample program ASMNU3.BP (in [908,35] of SOSLIB) for examples. ========================================================================== A-Shell Development Notes Version 5.1.1153.1 (25 June 2009) ========================================================================== 1. --- FTPDLX low-level debugging log moved from c:\debug.log to %TEMP%\ftpdebug.log (to avoid Vista security issues and also to reduce ambiguity.) Note that this adjustment is partly in ASHW32.EXE and partly in FTPDLXCALL2.DLL (version 5.1.0.205) - upgrading only one or the other will not fully address the issue. ========================================================================== A-Shell Development Notes Version 5.1.1153.0 (22 June 2009) ========================================================================== 1. --- New MIAMEX function MX_AGWRAPPER (177) serves as a convenient wrapper for "raw" ATE commands that are otherwise invoked via a sequence like: ? TAB(-10,AGCMD);PARMS;chr(127); input "",RESPONSE The MX_AGWRAPPER function reduces the above sequence to: xcall MIAMEX, MX_AGWRAPPER, AGCMD, PARMS, RESPONSE Aside from simplifying the syntax, MX_AGWRAPPER provides some intelligence to deal with the problem of typeahead that may be "in the pipe" at the time the command was issued and thus get mixed into the response. Note that the function should only be used with ATE (AG_xxx) functions that return a response. Otherwise there will be a 2 second delay until it times out waiting. 2. --- ATE refinement (server side): Server now informs ATE whenever a RUN program is starting and the keyboard channel is not being actively controlled by ATE. This allows ATE to start managing the keyboard data immediately, rather than waiting for the first ATE command issued by the program (and allowing typeahead characters to slip through in the meantime). While typeahead isn't necessarily a problem, it does complicate handling of ATE commands that require responses, and at best, slows down the connection due to excess round trips. 3. --- New XCALL TIMES built-in subroutine returns high-precision time information: xcall TIMES,opcode, The following opcodes have been implemented (so far): xcall TIMES,1,SEC ! seconds since midnight opcode 1 returns the number of seconds since midnight. This is equivalent to the system variable TIME, except that if the SECS parameter is a floating point variable, then the returned value may return fractional seconds. xcall TIMES,2,MSECS ! milliseconds since midnight opcode 2 returns the number of milliseconds since midnight. As with Op 1, if the MSECS is a floating point variable, a floating point (not necessarily integer) value will be returned. xcall TIMES,3,USECS ! usecs elapsed opcode 3 returns the number of microseconds elapsed since the last opcode 3. Note that this is only practical for timing operations lasting only seconds or perhaps minutes, but not hours or days. The first time called, the return value will be essentially random garbage. 4. --- AUI_MENU enhancements: Applications can now create menus with checked items (both standard and radio-style), as well as nested submenus, through the addition of a new optional parameter (itemid) and several new parameter flags: xcall AUI, AUI_MENU, opcode, menuid, mnutxt, mstate, mtype, & cmd, func, mstatus {,dlgid {,itemid}} The new parameter, itemid, may be used to attach a unique numeric ID to any menu item, in the range of 1000-32767. The id is optional for the existing menu item types, but necessary for submenus and checked menu items (in order to more easily reference them for querying, setting, or adding nested items to). New mtype flags: MBF_CHKMNU (&h0004) - A checked menu item MBF_RADIOMNU (&h0008) - A radio-style checked menu item New mstate flags: MBST_CHECKED (&h10000000) - Item is checked MBST_HILITE (&h20000000) - Item is hilighted MBST_DEFAULT (&h40000000) - Item is the default option Setting the checked state under application control: Checkable items start out unchecked by default, unless you specify the MBST_CHECKED state flag when adding the item. Applications may also change the checked state of an item using opcode MNUOP_STA, identifying the item via its parent menu id (menuid) and its item id (itemid), and setting or clearing the MBST_CHECKED flag in mstate. Setting the checked state under user control: The checked state is automatically toggled whenever the user clicks on a checkable menu item. Checkable items can also act like other menu items (depending on the MBF_KBD, MBF_CMDLIN, and MBF_SHLEXC flags, and the mnutxt contents). If you want the application to be notified whenever the checked state is changed by the user, specify the MBF_KBD flag and set mnutxt to a virtual symbolic key string (e.g. "VK_xF1001"). Otherwise, the application will be ignorant of changes to the checked state unless or until it queries the item explicitly (see below). Querying the checked state: opcode MNUOP_CHK now returns the current state of a menu item in the mstatus parameter (using the MBST_xxxx flags). Currently you must query the items individually, specifying the menuid and itemid. Radio check items: These act just like regular check menu items, except: - they are created with MBF_RADIOMNU rather than MBF_CHKMNU - when one of them is set, the others in the group are automatically unset. (A 'group' is a set of contiguous radio check items.) Hilighting: The MBST_HILITE state adds some kind of visual highlighting to the item. Under Vista, the effect is quite subtle, and basically the same as what you get when the mouse hovers over an item. Submenus: To create a submenu, use the MBF_SUBMNU flag and specify a menuid other than 0. (Submenus whose parent menuid is 0 are top-level drop-down menus.) To create the items within the submenu, set the menuid to match the itemid of the submenu itself. The new SOSLIB sample program ASMNU2 illustrates all of these capabilities. ========================================================================== A-Shell Development Notes Version 5.1.1152.6 (20 June 2009) ========================================================================== 1. --- ATE refinement: reverse order of typeahead processing to reduce chance of handling typed-ahead characters out of order. However, the value of this improvement is limited; a more robust solution may require converting certain TAB(-10,AG_xxx) commands to MX_xxx equivalents. (To be addressed in 1153.) ========================================================================== A-Shell Development Notes Version 5.1.1152.5 (17 June 2009) ========================================================================== 1. --- INFLD bug fix: fields that were too wide to fit on the screen were ending up invisible instead of shifted over to the left. (Bug introduced in 1139 with millicolumns.) 2. --- ATE refinement: close a loophole in which typeahead was slipping through on the tail end of ATE commands, resulting in typeahead characters getting garbled or rearranged. (Unfortunately, other such loopholes remain, particularly when intermixing TAB(-10,AG_xxx) commands that require responses with text-mode or raw input operations.) ========================================================================== A-Shell Development Notes Version 5.1.1152.4 (16 June 2009) ========================================================================== 1. --- XTREE/ATE (server side) bug fix: close a loophole in the optimization logic. If the user changed a cell, but then the application changed it back and re-entered, the optimization logic thought there was no change (which was partially correct), but that left the tree data out of sync with the answer array. 2. --- XTREE split/editable refinement: editable cell navigation now allows crossing over from the left pane to the right. Previously, navigation was only supported on the right, which meant that any editable cells in the left pane were only accessible by clicking on them in a way that didn't cause exit/re-entry for validation. ========================================================================== A-Shell Development Notes Version 5.1.1152.3 (15 June 2009) ========================================================================== 1. --- Windows printing bug fix: The pseudo-device names (DISK:, FAX:, etc.) were inadvertently made case-sensitive in 1150.4, causing problems with printer init files which used lower case names. ========================================================================== A-Shell Development Notes Version 5.1.1152.2 (12 June 2009) ========================================================================== 1. --- APEX refinement: Control+P now works as an alternative to clicking on the PRINT button (i.e. brings up the print dialog). ========================================================================== A-Shell Development Notes Version 5.1.1152.1 (09 June 2009) ========================================================================== 1. --- ATE refinement: transport error messageboxes were leaving the main window suspended until the message was acknowleged, which is reasonable, but was leaving open the possibility that the message box could become covered by another application window, giving the user the impression that ATE was just dead for no reason. Also, there was no way to copy and paste text from the window, since clicking OK on the error message generally led to the window being closed. 2. --- The A-Shell menu-bar options are now set according to the LANGUAGE option in the miame.ini. 3. --- Windows printing refinement: if the CHARSET option in the miame.ini is set to one of the 7-bit national replacement options (FRENCH, UK, PORTUG, SPANISH, or ITALIAN), then the print subsystem will convert the 7-bit characters for which replacements were defined into the ANSI equivalent so that they print correctly. ========================================================================== A-Shell Development Notes Version 5.1.1152.0 (07 June 2009) ========================================================================== 1. --- New ATE command AG_SETENV (77) to set an environment variable: ? TAB(-10,AG_SETENV);"=";chr(127); Example: ? TAB(-10,AG_SETENV);"APEX=%MIAME%\cache";chr(127); The above example defines (or redefines) the environment variable APEX to equal the specified directory, after first expanding the environment variable %MIAME%. (Note that the APEX environment variable defines where ATE puts the print files captured for local print or preview operations.) 2. --- Windows/ATE printing enhancement: when printing to the DISK: pseudo-printer (including via ATEAPX.SBX), the target directory will now be created if necessary. (The parent directory must exist though.) ========================================================================== A-Shell Development Notes Version 5.1.1151.1 (05 June 2009) ========================================================================== 1. --- COMPIL fix (compiler edit 436): The previous fix (435, 1151.0) wasn't quite right and was resulting in spurious compiler syntax errors. 2. --- XTREE revision: Move the new XTR'MISCFLAGS overlay from XTR'SHOW3D to XTR'TRUNCATED. New placement avoids problem of unexpectedly going into 3D mode when programs using the new flags are run on older versions of A-Shell or ATE. (The truncated option is less noticeable and generally always desirable anyway, so if it goes on or off unexpectedly, no one will be overly concerned.) Programs should be recompiled with the updated XTREE.MAP, XTREE.DEF, and XTREE.SDF files (retrieve from the SOSLIB). ========================================================================== A-Shell Development Notes Version 5.1.1151.0 (03 June 2009) ========================================================================== 1. --- XTREE enhancement: new XTRCTL fields to enable and configure "row headers". "Row headers" are like column headers but appear on the left side of the each item. Currently the only display options are to display row numbers, either starting with 0 or 1, and to display them as text or buttons. ... MAP2 XTR'HEADERSTYLE,B,1 ! col hdr style (XTHSF_xxx) MAP2 XTR'ROWHDRSTYLE,B,1 ! row hdr style (XTHSF_xxx) MAP2 XTR'SHOWROWHDR,B,1 ! row hdr vis/type (XTRHF_xxx) MAP2 XTR'UNUSED2,X,13 ! unused XTR'ROWHDRSTYLE uses the same flags as XTR'HEADERSTYLE XTHSF_xxxx) XTR'SHOWROWHDR uses the following new flags (defined in XTREE.DEF): define XTRHF_NONE = 0 ! no row headers (default) define XTRHF_BTNCNT0 = 3 ! numeric buttons, from 0 define XTRHF_TITLECNT0 = 4 ! numeric titles, from 0 define XTRHF_BTNCNT1 = 5 ! numeric buttons, from 1 define XTRHF_TITLECNT1 = 6 ! numeric titles, from 1 The differences between "buttons" and "titles" are that buttons are clickable (as a way of selecting the item), and they have a slightly different look. 2. --- XTREE enhancement: The existing XTR'SHOW3D field has been replaced with XTR'MISCFLAGS to allow more options to share the byte. To maintain backward compatibility, the new field overlays the old one, and the option bits are defined to avoid conflict: ... MAP2 XTR'SHOW3D,B,1 ! display using 3D mode MAP2 XTR'MISCFLAGS,B,1,@XTR'SHOW3D ! misc flags (XTMF_xxx) ... So far, the following flags are defined (in XTREE.DEF): define XTMF_SHOW3D = &h01 ! 3D mode define XTMF_INTHEIGHT = &h02 ! make height integral # of rows define XTMF_INHERITBG = &h04 ! left margin inherits bg from 1st col The XTMF_INTHEIGHT option applies only to trees with fixed-height rows (XTF_VARY is not set), forcing the overall height of the tree to be reduced slightly to avoid a partially displayed row. The XTMF_INHERITBG option affects the background of the left margin area, which, depending on many factors, may be visible to the left of the first column. 3. --- COMPIL bug fix (compiler edit 435): whenever the compilation had to be restarted in order to automatically activate the /A or /AV switch, if the program used defined structures, the compiler was consuming 1 or 2 memory handles, leading eventually to an "out of memory handles" error (after about 50 such compilations). 4. --- XTREE bug fix: in some cases, exiting from the bottom row of a tree via a context menu was returning XTR'TARGETROW set to 1 less than the actual row clicked. 5. --- XTREE bug fix: extended checkbox context menu commands (see 1150.8) that were not showing (because not applicable to the current column) were resulting in the menu operation not matching up with the menu text. ========================================================================== A-Shell Development Notes Version 5.1.1150.8 (03 June 2009) ========================================================================== 1. --- XTREE checkbox enhancement: Extended checkbox columns ("T+", see 1150.6) now support an undo capability (using ^Z) to undo the action of ^A (set all), ^B (clear all), and Shift+Click (set range) operations. The undo feature is only operational immediately after the event to be undone. 2. --- XTREE checkbox enhancement: New special PopupMenu actions have been implemented to allow access to the set all (^A), clear all (^B) set all dependents of current item, clear all dependents of current item, and undo (^Z) functions: $CBSET, $CBRST, $CBSETDEP, $CBRSTDEP and $CBUNDO. These may be added to individual column menus, or to the common (column zero) menu. In either case, they will only appear when an extended checkbox column (T+) is right-clicked. Furthermore, the undo option will only be enabled when undo is possible. For example: Coldef = "0~0~x~H~PopupMenu=Set All,$CBSET;Clear All,$CBRST;" & + "Set all dependents,$CBSETDEP;Clear all dependents;$CBRSTDEP;" & + "Undo;$CBUNDO~~" The above would create a common popup menu with the specified functions which would only appear in the context of an extended checkbox column. Note that if XTF_MLVL is not set (i.e. tree is not multi-level), the $CBxxxDEP options will be ignored. If multi-level, but the clicked-on item doesn't have dependents, then the option will be disabled. ========================================================================== A-Shell Development Notes Version 5.1.1150.7 (03 June 2009) ========================================================================== 1. --- Windows Printing enhancement: Modernize the printer matching logic. Previous method was running into limitations in some newer environments, such as an inability to scan more than about 14 printers. Also, if a printer is known to exist but A-Shell fails to find it in the matching logic, you can set the first character of the printer name in the DEVICE statement to lower case (e.g. DEVICE = hP Laser), in which case if it fails to find it in the directory, it it will trust you and just try to open it blindly. (This has long been the procedure for printers using share names like \\server\name.) ========================================================================== A-Shell Development Notes Version 5.1.1150.6 (02 June 2009) ========================================================================== 1. --- XTREE enhancement: The new cformat code "+" may be added to "T" (i.e. "T+") to enable entended checkbox functions whenever the focus is on an editable checkbox cell: - Control+A ticks all the checkboxes in the column - Control+B clears all the checkboxes in the column - Click, followed by Shift+Click on another checkbox in the current column ticks all the checkboxes between the two clicked boxes. ========================================================================== A-Shell Development Notes Version 5.1.1150.5 (01 June 2009) ========================================================================== 1. --- XTREE Image handling bug fixes: The internal image count was not being reset when using XTROP_REPLACE, leading to an eventual failure to load images (when the XTF_VARY flag set). Even then, XTREE should have auto-expanded the image allocation according to the second argument of the ImgCount=#,# coldef clause (grow-by), but was failing to do so when XTF_VARY was set. ========================================================================== A-Shell Development Notes Version 5.1.1150.4 (27 May 2009) ========================================================================== 1. --- GDI printing bug fix: an adjustment around 1148 to correct a problem with vertical spacing getting way out of kilter when previewing and then printing was causing the LPP value in the printer INI to be effectively ignored. (In the absence of a //SETVMI command, this in was resulting in the vertical spacing getting initialized based on the font and/or paper size.) 2. --- XTREE/ATE bug fix: Server side was crashing when XTREE called without specifying the XTRCTL parameter. (Problem introduced in 1150.0) ========================================================================== A-Shell Development Notes Version 5.1.1150.3 (27 May 2009) ========================================================================== 1. --- XTEXT refinement: XTEXT now supports ATE-client-relative filespecs for the source and destination. Previously it was complaining that the source file was not available. ========================================================================== A-Shell Development Notes Version 5.1.1150.2 (26 May 2009) ========================================================================== 1. --- XTREE refinement: On re-entry, if xtr'targetrow=0, use xtr'xrow to determine vertical scroll position. 2. --- XTREE bug fix: ansary optimization introduced in 1150 was causing entire TXTCTL structure to not be updated. ========================================================================== A-Shell Development Notes Version 5.1.1150.1 (25 May 2009) ========================================================================== 1. --- XTEXT bug fix (serious!!!): None of the fields in the TXTCTL structure were getting updated on exit, as a result of a coding error introduced in 1150.0. In some programs, this problem was not an issue, but in others, it was catastrophic. ========================================================================== A-Shell Development Notes Version 5.1.1150.0 (22 May 2009) ========================================================================== 1. --- XTREE / ATE optimization: When using opcode XTROP_REPLACE, the server side of XTREE now detects when the data array has not changed from the previous call, and in such a case, automatically switches to XTROP_RESELECT mode (which saves transferring the data from the server to the client, as well as loading it into the tree.) This optimization is mostly useful in situations where cell-to-cell movement causes an exit and reentry, and you are obligated to use XTROP_REPLACE rather than XTROP_RESELECT because you can't be sure if the data actually changed. (A multi-user appointment scheduler would be an example, where you have to reload the schedule data from disk because you don't know if another user made a change in the meantime.) Note: this optimization is purely on the server side, and thus will work with older ATE clients as well. 2. --- XTREE / ATE optimization: Similar to the optimization of the data array just described, but for the answer array. For editable trees with opcodes XTROP_REPLACE and XTROP_RESELECT, the server side detects if the answer array has changed since the previous call, and if not, it eliminates the redundant transfer of answer data to the ATE client. As with the above described optimization, this is primarily handled on the server side, and works even with older ATE clients. However, the optimization is somewhat better if the ATE client is also at 5.1.1150+, since in that case it is also able to skip the CPU activity involved in scanning/re-loading the editable cells from the answer array. 3. --- XTEXT bug fix: Older programs using the 256 byte version of the TXTCTL structure in a non-ATE environment were getting the equivalent of garbage values in the last few fields of the structure, causing the new printing features to act strange. 4. --- XTREE refinement: The XTHSF_NOTBTN flag (see 1142.0) has been renamed to XTHSF_NOHIGHLIGHT and its behhavior changed slightly so that the headers can still be clicked to sort the column. In the new scheme, they are actually buttons, but they don't get auto-highlighted when the column is active. 5. --- XTEXT enhancement: new opcode flag, TXOPF_PREVIEW (&h0020), may be added to TXOP_CREATE, TXOP_REEDIT, or TXOP_DISPLAY to cause XTEXT to display the print preview window. In the case of TXOP_CREATE or TXOP_REEDIT, the user will be left to manipulate the preview, which also means that he/she will be able to print and/or return to edit mode. 6. --- Windows printing enhancement: Whenever a printer is selected from the printer selection dialog, that printer becomes the default, for this user, for any subsequent A-Shell printer selection dialogs. Previously, the printer selection dialog always started at the global Windows default printer for this workstation. Besides being more convenient and intuitive for the user, this also means that any special configuration saved for the printer in the printer driver properties will be used as the default configuration (rather than the default printer's configuration). ========================================================================== A-Shell Development Notes Version 5.1.1149.3 (20 May 2009) ========================================================================== 1. --- 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.1.1149.2 (19 May 2009) ========================================================================== 1. --- Windows printing refinement: when using passthrough printing to a printer defined only by a sharename (\\machine\printer), in some environments it is unable to open the document properties in order to preset the orientation and copies. Previously in such cases it was displaying an error message box, even though it would then go on to print successfully. Now the error message is only written to the log file, unless the LP trace option is set. Note that this could obscure an error, confusing the question of why the orientation or copies is not getting set as expected. But in such cases, the error information will be in the ashlog.log file, while in all the other cases, the user no longer needs to be bothered by the non-critical error report. ========================================================================== A-Shell Development Notes Version 5.1.1149.1 (18 May 2009) ========================================================================== 1. --- AUI_MENU / ATE bug fix: Using MNUOP_RST (reset menu) under ATE was failing to re-establish the special ATE menu items (licensing, open local session, disconnect, connection properties). 2. --- ATE AUXLOC: printing enhancement: It is now possible to combine the +G{DI} or +P{ASSTHROUGH} option with a printer name (whether a printer init file or a raw Windows printer name) in the DEVICE = AUXLOC: statement. For example: DEVICE = AUXLOC:\\SERVER\SHARE NAME+PASSTHROUGH DEVICE = AUXLOC:HP Laserjet Series 37+PASS Previously all three of the above would have been interpreted as printer names (e.g. INVOIC+GDI, etc.) and would have therefore failed to find a match. Now, the +G{DI} or +P{ASSTHROUGH} will be recognized (in order to specify the associated mode) and not treated as part of the printer name. Notes: - Prior versions of A-Shell on the server side were limiting the total length of the printer name (+ optional mode) specification to 32 bytes. - The mode may be specified with a few as 2 characters (e.g. +G or +P). (The downside of this is that those pairs of characters cannot appear within the printer name itself.) - When printing to a printer by its raw Windows printer name or share name (i.e. not via a printer init file), the default mode is GDI, so there is no particular need to specify +GDI in that case. - When printing to a printer via a printer init file, the printer init file will override any mode specified in the DEVICE=AUXLOC: statement. (Even if the printer init file has no PASSTHROUGH statement, that is equivalent to PASSTHROUGH=ON). ========================================================================== A-Shell Development Notes Version 5.1.1149.0 (16 May 2009) ========================================================================== 1. --- XTEXT enhancement: New opcode/flag: TXOPF_PRINT (&h010) may be added to TXOP_CREATE (1) or TXOP_REEDIT (2) to print an XTEXT document (independently of anything else and outside of the normal A-Shell printing subsystem). The combination TXOP_CREATE + TXOPF_PRINT can be used to print an XTEXT document from the source (file or buffer), while TXOP_REEDIT + TXOPF_PRINT can be used to print an XTEXT document that is currently open and displayed. You may specify the target printer (using standard Windows printer name syntax) by adding the following clause to the fmtdef parameter: Printer=name where name is the descriptive name of the printer, as it appears in the print manager control panel applet. If there are other clauses in the fmtdef parameter, terminate this one with a "~" or ",". If no printer is specified, the current default printer is used. You may also request to have XTEXT display a standard printer select dialog by setting the flag TXF8_SEL_PTR_DLG (&h10000000) to the txc'flags8 field in the txtctl parameter. If the printer dialog option is not select, then printing via TXOP_CREATE + TXOPF_PRINT will not display the XTEXT. The XTEXT.DEF file has been updated with the new symbols. Note that for ATE, this feature requires updating both the server and ATE client. 2. --- XTEXT enhancement: Margin, papersize and orientaton specifications. New fields added to TXTCTL (see below). These are mainly only of of interest in TXF_PRINTVIEW mode. MAP1 TXTCTL ... MAP2 TXC'HFLAGS2 ,B,4 ! 246 HTML flags MAP2 TXC'MGNLEFT ,B,2 ! 250 left margin (twips) MAP2 TXC'MGNRIGHT ,B,2 ! 252 right margin (twips) MAP2 TXC'MGNTOP ,B,2 ! 254 top margin (twips) MAP2 TXC'MGNBOTTOM ,B,2 ! 256 margin margin (twips) MAP2 TXC'MGNHEADER ,B,2 ! 258 header margin (twips) MAP2 TXC'MGNFOOTER ,B,2 ! 260 footer margin (twips) MAP2 TXC'PAPERSIZE ,B,2 ! 262 paper size (see DMPAPER_xxx) MAP2 TXC'ORIENT ,B,1 ! 264 orientation (0=dflt, 1=port, 2=land) MAP2 TXC'UNUSED ,B,1 ! 265 (266 total) Note: the original size of TXTCTL was 256, so it may be that existing applications or functions have a 256 byte limit which would make the fields starting from TXC'MGNBOTTOM be invisible. For the the same reason, if using XTEXT from ATE, both server and client would need to be at 5.1.1149 or higher in order for all the new fields to work. 3. --- GDI printing bug fix/refinement: The width parameter in the //SETFONT statement now works more precisely and reliably with fixed pitch fonts, across all font families, printers and resolutions. Previously, certain fonts (most notoriously Courier) didn't "behave" very well. And in addition, since the individual cell width was being rounded to the nearest integer number of pixels, small adjustments to the width were often not having the desired effect with lower printer device resolutions. Now, the cell width is interpolated to 1/8 of a pixel, resulting in fine control even with 100 DPI (e.g. fax) devices. COMPATIBILITY WARNING: This "fix" could possibly result in a small change in the horizontal character spacing of existing printouts. The change will probably be small, and will always represent a correction, but it is possible that having worked out precise spacing by trial-and-error, you may need to make adjustments after this fix. (After considerable soul-searching and public comment, we decided that since width is a relatively new parameter, rarely used, that the likelihood of this fix actually improving the spacing of existing reports was many times greater than the chance of it making a report worse. But if you use the width parameter to fine tune the fixed pitch spacing of a very precise form, and especially if you used trial-and-error rather than math to figure out the ideal width, you may need to take another look. (The upside is, anyone affected by this would have been at risk of their repors looking different on different printers; so even if you have to make an adjustment, the report will now print consistently across devices.) See the following forum thread for a more detailed discussion: http://www.microsabio.net/ubb2/ultimatebb.cgi?ubb=get_topic;f=1;t=000103 4. --- GDI printing bug fix/refinement: //SETVMI vertical spacing is now interpolated to fractional pixels, rather than being rounded to the nearest pixel. This corrects a problem where, depending on the VMI factor and resolution, you might have ended up with vertical spacing that was off by a fraction of a pixel. That doesn't sound like much, but by the time you get to the bottom of a page (60+ lines) a half pixel error multiplies to 30 pixels, which might be as much as an entire line. This problem typically showed up when switching between a laser printer (at 600 or 1200 DPI) and a PDF or FAX device at 100-300 DPI. And even then, it would generally have gone unnoticed unless you were using a mixture of GDI directives to draw boxes (which wouldn't have been subject to a per-line error accumulation) and regular print lines to fill them in. COMPATIBILITY WARNING: Existing printouts which used //SETVMI to set the vertical spacing necessary for printlines to line up with boxes drawn with GDI primitives may be affected by this (generally in a way that improves the alignment, unless you happened to have relied on the accumulated rounding error without realizing it). See the following forum thread for a more detailed discussion: http://www.microsabio.net/ubb2/ultimatebb.cgi?ubb=get_topic;f=1;t=000104 5. --- XTREE bug fix: re-entering a tree with XTROP_RESELECT and the XTF_NOREDRAW flag set was leading to a mismatch between the actual sorted state of the tree and the state as reported back to the application via XTR'COLUMNSORT() and XTR'SORTORDER(), which on a subsequent re-entry may have caused the sort order to change unexpectedly and inappropriately. ========================================================================== A-Shell Development Notes Version 5.1.1148.1 (11 May 2009) ========================================================================== 1. --- MX_FSPEC refinement: on error, it was setting the locpath parameter to the last processed filespec, leading some applications (that didn't check the returned status parameter) to assume it was a valid result. It will now be set to "" in case of error. ========================================================================== A-Shell Development Notes Version 5.1.1148.0 (07 May 2009) ========================================================================== 1. --- ATE enhancement: a new transport option, SSH, is now offered. SSH is similar to TUNNEL except: a) it doesn't require the telnet daemon on the server, nor it's port, typically 23, to be open; b) is uses ASHNET.DLL (1.2.108+) instead of ATETUNNEL.EXE / WODTUNNEL.DLL; c) the connection will appear to the host as originating from your PC or local router, rather than from localhost; d) there is only one login operation, and you won't ever see the server prompts for it. (If there is a problem with the login, a local Windows dialog will display, allowing you to correct your name/password). In most cases, the new SSH option will be preferable to the TUNNEL option, but the differences may not be that important to many users. (And there may be a shake-out period during which some SSH glitches may have to be resolved.) ATECFX.SBX has been updated to 4.1(132) to support the new SSH transport option. Note that when the SSH transport is selected, the Telnet Port, Local Tunnel Port, Verbose Tunnel Interface, and "Wait for Login Prompt" fields are disabled, as they don't apply. 2. --- ATE enhancement: When using the SSH transport, if the login fails because of a problem with the name or password, a dialog will display, allowing you to adjust them and retry or cancel. If you make adjustments and succeed to connect, then your updated name and password will be saved in your profile, UNLESS those fields were blank in the profile initially. The theory here is as follows: in more secure environments, including those where the password is forced to be changed frequently, the name might be stored in the profile, but the password left blank, forcing it to be entered interactively on each connection. Or, if multiple users share a PC and/or connection profile, you might leave them both blank to force both to be entered each time. In either of these cases, the fields which are initially blank in the profile will be left blank. However, if you store a non-blank name and/or password in the profile, and there is a problem with one, and you make the necessary corrections while logging in, then your corrections will be saved in the profile. The special value "[init]" may be entered into the server name, login name, and/or login password to cause it to prompt on the first try, and then to save the values you enter. (Actually, any values will give you the same effect, except for the initial attempt to connect. ATE recognizes the "[init]" and prompts immediately, before trying to connect.) If the login name is updated, the FTP name will also be updated if it was non-blank in the profile and originally matched the login name, or if it was set to "[init]". Likewise with the FTP password. (Usually the login and FTP credentials are the same, but it is possible that you want the server to always prompt for FTP login (in which case leave those fields blank), or they are simply different (in which case you probably don't want the FTP credentials to change just because the login credentials did.) 3. --- ATE enhancement: When the server and client PC clocks are out of sync by more than 24 hours, the warning message is now slightly more helpful (showing the server date and explaining that ATE will have to operate in eval mode until the clocks are re-synchronized. The message text may also be configured by editing the system message files. 4. --- GUI bug fix: The ATE "tokenize" (GOP2_GUISPCINDENT) option was falsely displaying text tokens consisting of a minus-sign followed by a single digit as "--". 5. --- Windows printing refinement: an internal limit of 50 characters for the descriptive/device name of a printer has been increased to 100. 6. --- ATE licensing refinement: Improve the handling of the situation where the client and server clocks are more than 24 hours out of sync. Previously it reported the fact but may have left users confused about its connection with the failure to license the ATE client. The new message is more clear, includes the server's date, and can be customized through the 003,xxx entries in the SYS:SYSMSG.lng file (where xxx is 010, 011 and 012). Also, once this error occurs, the server no longer retries, which was further confusing things. 7. --- PDFX bug fix: Email.Content text was being reverse truncated at the position of a ":" character, when using Type 4. ========================================================================== A-Shell Development Notes Version 5.1.1147.2 (05 May 2009) ========================================================================== 1. --- ATE file transfer bug fix: When transferring binary files through the ATE auxiliary port, using TAB(-10,AG_SPOOLCFG), or a wrapper such as ATEAPX.SBX (or equivalent), the target file was getting an extra garbage byte on the end when the original size was one less than a multiple of 1536. In most cases the extra byte was harmless, but it was causing ATEAPX.SBX to report file transfer verification failure, and may have led to other more subtle problems. ========================================================================== A-Shell Development Notes Version 5.1.1147.1 (01 May 2009) ========================================================================== 1. --- Follow-up correction to "XTREE refinement" in 5.1.1147 (item 2): it was not allowing certain editing keys, such as RUB and BACKSPACE. ========================================================================== A-Shell Development Notes Version 5.1.1147.0 (01 May 2009) ========================================================================== 1. --- Windows printing enhancement: The PRTCOPIES= printer init file parameter is now supported for Windows GDI (non-passthrough) printing. However, unlike in the UNIX world where the default is FALSE (meaning we tell the system spooler to generate the copies), in A-Shell/Windows the default has effectively been TRUE (meaning that A-Shell generates the individual copies, sending each one individually to the printer.) So the new option (of asking the printer driver to generate the copies) is achieved by setting PRTCOPIES=FALSE. Background: printer driver support for multiple copies has been historically unreliable, to the point that we just decided it was easier and more dependable to generate the copies locally within A-Shell. And in the Windows world, the performance penalty for this is usually quite negligible. However, there are some cases where the difference between having A-Shell generate the copies and having the printer driver generate them is significant. In such cases, you can now add PRTCOPIES=FALSE to your printer init file. Note that this is ignored for PASSTHROUGH printing (since Windows drivers do not support such functionality in "raw" mode), and it will be over-ruled if A-Shell detects any problem with the capability (i.e. if the driver doesn't indicate support or returns an error when we try to set the copies.) 2. --- XTREE refinement: Editable cells using cformat codes "#.", "#-", and "#-." (numeric with decimal, negative or both) were allowing non-numeric characters to be entered while editing. This loophole is now closed, although it is still possible to pre-load or display non-numeric data in such cells. 3. --- Windows / APEX bug fix: some GDI files with a large number of //MOVETO commands (and a correspondingly large number of text lines per page) were fooling APEX into thinking the pages were overflowing, causing it to overstate the number of pages (on the APEX title bar). 4. --- XTREE bug fix: Numeric editable cells with custom cell background colors were losing their color after editing. ========================================================================== A-Shell Development Notes Version 5.1.1146.2 (23 April 2009) ========================================================================== 1. --- HTTP.SBR bug fix: Remove dependency on AshNet_FTP routine which was causing an "unable to link" error if the version of ASHNET.DLL was less than 107. 2. --- ATE adjustment: default for the "GUI tokenize" option is now OFF within ATE itself, even though it is ON within the ATE configuration dialogs. Even though this seems illogical, it only affects sites who upgrade from ATE 5.0 to 5.1 without going through the ATE configuration dialog. (Since the default was OFF in 5.0, it makes sense to preserve that in 5.1 with existing profiles that have not been edited. (This probably only affects FMC.) ========================================================================== A-Shell Development Notes Version 5.1.1146.1 (21 April 2009) ========================================================================== 1. --- *** WARNING: COMPATIBILITY CHANGE *** All of the VUX (VUE function key translation files) had an incorrect translation for Shift-F5. They were returning ^_Q (toggle insert) instead of ^_U (clear block). Presumably this is a benign bug fix, but if you were somehow counting on the prior translation, you may want to retrieve a backup copy of your VUX files and/or re-adjust them using FIXTRN. 2. --- XTREE HOME/END key refinement. The new XTF2_HOME_CTRL and XTF2_END_CTRL flags (see 1146.0 below), when used in an editable tree where XTF_HOME and/or XTF_END are not set, allows HOME and END to, in some types of editable cells, navigate to the first / last editable cell on the current line. By "some types" we mean essentially any kind of editable cell except one that allows you to directly edit the contents of (i.e. a standard editable text cell), since in the latter case, HOME and END are captured by the edit box itself to move the cursor to the beginning and ending of the cell, rather than to move between cells. But for checkboxes, radio buttons, read-only cells, etc., these new keys provided yet another navigational shortcut for power users. Note that for convenience and perhaps clarity, a new symbol has been defined in XTREE.DEF: define XTF2_NAVCOL = &h00000003 ! (XTF2_HOME_CTRL+XTF2_END_CTRL) Also note that these flags have no effect in non-editable situations, provided the keys are not enabled as exit keys (via XTF_HOME / XTF_END). If they are enabled as exit keys, then the XTF2_NAVCOL flags reverse the action of the simple keys and the keys with Control+. In other words, when set, Control+HOME will navigate to the first row, while HOME will exit; otherwise, Control+HOME exits and HOME navigates. 3. --- INFLD GUI bug fix: The default INFLD TYPE codes (set via SBR=INFDEF:xxxx or SET INFDEF) were not being used when redisplaying the control after editing or in display mode. For the most part this didn't matter, but it was noticeable in certain circumstances (like when the default TYPE codes included "||F", and the font scale factor was <> 0, and the force fixed pitch font option was not selected). Note: in ATE environments, this patch applies to the server side. 4. --- Compiler bug fix: (edit 434) The enhanced AS clause support (see 1145 below) allowing symbols to be use for parameter sizes (e.g. "a as X MAX_A") was only working for the passed parameters (i.e. those within the parentheses) and not for the final "AS " clause which determines the return type/size of the function. (Essentially the size was being ignored if expressed as a symbol, and the default size was used instead). 5. --- APEX refinement: To reduce the possibility of the saved/restored preview window size being too small or oddly placed to easily spot it, the minimum size has been increased to 250x200 pixels, and if the saved position is more than 10% outside the current extended desktop, we use a default size/position on the main monitor, rather than just sliding it over to the nearest visible position on the virtual/extended desktop. (The theory here is that the previously saved window position doesn't match the curent desktop/monitor configuration, then the environment has changed and there is probably no value in trying to preserve the last known position; better to restart with conservative defaults in that case.) ========================================================================== A-Shell Development Notes Version 5.1.1146.0 (19 April 2009) ========================================================================== 1. --- ***** WARNING: COMPATIBILITY CHANGE ***** XTREE change to handling of HOME and END keys. We are now reverting back to the way these keys were handled prior to 5.1.1133 (when a change was made such that the XTF_HOME and XTF_END flags causes HOME and END to exit (without requiring the Control key to be pressed). Although that change seemed like a good idea at the time, it has apparently caused a major problem in at least one app that was counting on the old behaviour and just discovered the new behaviour. After lengthy and heated debated, we made the decision to roll back the behavior and introduce a pair of new flags to allow the behavior from 5.1.1133 thru 5.1.1145.5 to be continued. Note that if you don't use the XTF_HOME or XTF_END flags, this change will not affect you. Also note that for ATE environments, the change is only on the ATE side. To implement the new flags, since we were out of bits in the XTREE FLAGS parameter, we now support a new expanded form of the parameter: MAP1 XFLAGS'X MAP2 XFLAGS,B,4 ! original XTF_xxx flags MAP2 XFLAGS2,B,4 ! new XTF2_xxx flags If you don't care about the new XTF2_xxx flags, you can continue to use the original form of the FLAGS parameter (passing it as a B,4 or F,6). But if you want to use the new XTF2_xxx flags, you must switch to the new format as shown above. The new flags are defined in the updated XTREE.DEF as: define XTF2_HOME_CTRL = &h00000001 define XTF2_END_CTRL = &h00000002 (The XTF2_ prefix is meant to remind you that the above flags relate to the second flags longword, i.e. XFLAGS2 in the map above.) The XTF_xxx_CTRL flags, as their names hopefully suggest, affect the behavior or need for the combination of the Control key with the xxxx (HOME or END) key. When set, and assuming that the corresponding XTF_HOME and/or XTF_END are also set, then these bits reverse the behavior of the Control key in conjunction with the HOME / END keys. Thus, HOME and END without the Control+ will be interpreted as exit keys, while Control+HOME/END will be interpreted as a navigation request to the first/last row. WARNING: Older versions of A-Shell will not recognize this new format of passing XFLAGS as an unformatted structure, causing XTREE to fail to understand any of your flags. If that presents a problem, the workaround is to map the FLAGS argument as an array of 2 B,4 elements, e.g. MAP1 XFLAGS(2),B,4 In that case, pass XFLAGS(1) for the flags argument and XTREE will just assume that you passed an array of 2 elements, with the 2nd element containing the XTF2_xxx flags. ATE, however, does not present any particular compatibility issues. Versions prior to 1146 simply won't see the XTF2_xxx flags. So, if you have only one or a few servers to update, but uncountable ATE clients, then it may be better to update those servers and use the XFLAGS'X format, since it is more extensible and A-Shell doesn't have to assume that there are at least 2 elements in the array. 2. --- ATE disconnect improvement: in some cases, using File > Disconnect while in a GUI input operation was causing the "|D" to appear in the input control, rather than disconnecting. ========================================================================== A-Shell Development Notes Version 5.1.1145.5 (18 April 2009) ========================================================================== 1. --- GUI bug fix: the height of INFLD controls on the main window, when the "Force edit box height to match combo" option was checked, and the Proportional font scale factor was > 0, was incorrect. Instead of calculating the combo height based on the specified percentage of the coordinate cell (aka main window "grid") size, it was basing it on the specified percentage of the normal combo height. ========================================================================== A-Shell Development Notes Version 5.1.1145.4 (15 April 2009) ========================================================================== 1. --- GUI bug fix: right clicking on a control prior to any XTREEs being created was causing a GPF. 2. --- XTREE bug fix: remove the extra blank row that was inadvertently added to each XTREE by the 1145.3 patch. ========================================================================== A-Shell Development Notes Version 5.1.1145.3 (15 April 2009) ========================================================================== 1. --- XTREE bug fix: close GPF loophole if ADDCNT < 0 2. --- STRTOK (and possibly other SBR) bug fix: close GPF loophole when a null string is passed back to a non-string parameter. ========================================================================== A-Shell Development Notes Version 5.1.1145.2 (10 April 2009) ========================================================================== 1. --- FTP bug fix: Attempting to send a file to the root directory of a network drive (e.g. "\\server\share") was failing. Also, attempting to send a file to a non-existent subdirectory of a network drive was failing to create the directory, and thus failing to transfer. 2. --- STRTOK.SBR bug fix: close a loophole which, under some conditions, caused a GPF or segmentation fault when the source string was empty. (One doesn't normally try to tokenize an empty string, but it should still support it without failing.) 3. --- MX_WINSETTINGS bug fix: (Actually it's mostly a workaround to support a misunderstanding left by the documentation which didn't get updated properly.) Opcodes 2 (save) and 3 (load) should use the following syntax: xcall MIAMEX, MX_WINSETTINGS, op, file$, status However, the documentation didn't mention this and instead gave only the syntax for opcodes 0 and 1: xcall MIAMEX, MX_WINSETTINGS, op, id, value Since there is no specific "id" value corresponding to the filename, some people were trying to save the settings to the current ash file using: xcall MIAMEX, MX_WINSETTINGS, 2, 0, 0 But this was actually trying to save the settings to the file: \0.ash (In some cases, it was trying to make the file name be 0.00000, in which case it generally displayed a message box saying that it failed.) The refinement is that now, when the file$ argument is "0" or "", it is interpreted as meaning that you want to save to or load from the current settings file. ========================================================================== A-Shell Development Notes Version 5.1.1145.1 (09 April 2009) ========================================================================== 1. --- GUI dialog scaling bug fix: maximizing or otherwise scaling a dialog was not working properly when the original dialog grid height and width scale factors were not 100 to start with. If they were smaller, the controls were scaled too large (often going off the right edge of the dialog when maximizing). 2. --- Compiler bug fix (compiler edit 433): nested structure definitions were not being recognized when the first character of the referenced structure name was not capitalized. ========================================================================== A-Shell Development Notes Version 5.1.1145.0 (06 April 2009) ========================================================================== 1. --- Compiler/language enhancement: A new statement has been defined to redimension an array originally created with DIMX: DIMX VARNAM(SUB1,...,SUBn),, ... REDIMX VARNAME(SUB1,...SUBn) Notes: - The REDIMX statement must occur after the corresponding DIMX (both during compilation and at runtime). If the compiler sees the REDIMX first, it will report an unmapped variable. If the runtime sees the REDIMX first, it will report error 30 (redimensioned array - same error as you get when attempting to use DIMX a second time). - You cannot change the number of subscripts; you can only change the maximum value(s) of the subscript(s). - The REDIMX statement can not specify a variable type or size; thus you cannot change the original type or size. - The original contents of the array will be preserved ONLY if the all dimensions beyond the first (for multi-dimensioned arrays) are preserved. For example, if you start with DIMX A(P,Q,R), and then redimension using REDIMX A(X,Y,Z), the contents will be preserved only if Y=Q and Z=P (i.e. if the only dimension changed in the first dimension). - The MALLOC trace option will trace DIMX and REDIMX memory allocations (along with most other memory allocations/deallocations), making it a useful debugging tool. 2. --- Compiler enhancement: The parameter type "AS" clause in function and procedure headers now allows symbols to be used in place of literal values for the sizes of the parameters. To accomplish this, leave a space between the type code and the symbolic size. For example: Function Fn'FmtName$(first as s MAX_FIRST, last as s MAX_LAST) as s MAX_NAME (The space after the type code is necessary since otherwise "sMAX_FIRST" would appear to be the name of a structure.) Previously, in order to accomplish the same thing, you had to create a structure to contain the string. Otherwise, you were reduced to hard- coding the parameter sizes, thus inviting bugs when you increased the maximum size of the calling parameter but forgot to update the function. ========================================================================== A-Shell Development Notes Version 5.1.1144.2 (02 April 2009) ========================================================================== 1. --- AG_INFLD was complaining about an improperly terminated setdef when the TYPE "{" (charset) code was used. ========================================================================== A-Shell Development Notes Version 5.1.1144.1 (01 April 2009) ========================================================================== 1. --- EZTYP refinement: when running in an ATE GUI environment (with the TYPE code |G added to the SBR=INFDEF: list to automatically use the GUI form of INFLD), the combination of GUI and non-GUI raw character input in the EZTYP routine was causing undue slowness, at best, and dropped characters at worst. (One symptom was that holding down the up arrow was now scrolling reliably upward, but was causing the display to jump up and down erratically.) Note that this fix only applies on the server side. 2. --- ATE refinements in directing input (and especially typeahead) to the correct place (i.e. either the server or the client) when using GUI operations. (In a normal GUI program, virtually all of the real keyboard characters should be consumed on the client side, rather than sent directly to the server, but the reverse is true if the server uses any non-GUI input routines.) Previously, tiny timing gaps were allowing typeahead characters to get sneak through when moving from one GUI input operation to the next, which sometimes led to confusion or dropped characters. ========================================================================== A-Shell Development Notes Version 5.1.1144.0 (31 March 2009) ========================================================================== 1. --- ATSD refinement: ATSD.EXE 5.1.107 supports a new command line switch, "-proto2", which enables a new protocol for launching the A-Shell child sessions. While the old protocol was fine in 99% of the cases, some NIC drivers did not support it, with the result that sessions would appear to connect and then instantly disconnect. When the -proto2 command line switch is passed to ATSD.EXE (either via the ATSDSRV.INI or a shortcut), it now uses Microsoft-recommended WSADuplicateSocket protocol. This protocol requires ASHW32.EXE 5.1.1144.0 or higher, although only for the ASHW32.EXE which is launched on the server side. (It does not affect or depend on the telnet client version.) 2. --- A-Shell/Windows now supports the -proto2 protocol in ATSD as described above. (It continues to support the older protocol as well.) 3. --- New AG_TRACE (76) command allows the application on the server to clear, set, or query the trace flags on the ATE client in real time. This is mainly useful for debugging, but in such a case, can be very handy since it is not often practical to arrange for users to change the trace flags on individual copies of ATE. Syntax: SIGNIFICANCE 11 ! (needed to avoid exponential notation) MAP1 OP,B,1 ! 0=clear, 1=set, 2=query MAP1 TRFLAGS,B,4 ! Flags to clear, set or query ? TAB(-10,AG_TRACE);OP;",";TRFLAGS;chr(127); if OP=2 then ! for query, input the set of flags input "",TRFLAGS endif In all cases, start by setting TRFLAGS to be the combination of one or more flags that you are interesting in clearing, setting, or querying. You can also specify them directly, using the TROP_xxxx symbols from the ashell.def file. For example, to set the XTREE and XDEBUG flags: ? TAB(-10,AG_TRACE);"1,";(TROP_XTREE or XTROP_XDEBUG);chr(127); To specify all flags, you can use the shorthand -1: ? TAB(-10,AG_TRACE);"2,-1";chr(127); ! query all flags input "",TRFLAGS ! for query, retrieve results ? "Current ATE trace flags: ";Fn'Dec2Hex$(TRFLAGS); ! display in hex if (TRFLAGS and TROP_ATE) then "ATE trace set" if (TRFLAGS and TROP_XTREE) then "XTREE trace set" etc. ========================================================================== A-Shell Development Notes Version 5.1.1143.5 (30 March 2009) ========================================================================== 1. --- XTREE enhancement: new advanced COLDEF clause may be used to force XTREE to exit at the completion of a drag/drop operation: DropExit=### ### specifies the desired exitcode. Note that the exitcode will be -### (i.e. DropExit=88 will return exitcode -88 on a drag/drop). (Same syntax as SelChgExit=###). 2. --- XTREE bug fix: XTF_DRAGDROP in array mode was returning garbage (data from the tree) when XTF_SORT was not specified. ========================================================================== A-Shell Development Notes Version 5.1.1143.4 (28 March 2009) ========================================================================== 1. --- ATE refinement: minor adjustment to TCP disconnect logic, hopefully to allow for cleaner client-initiated shutdowns. ========================================================================== A-Shell Development Notes Version 5.1.1143.3 (28 March 2009) ========================================================================== 1. --- Compiler bug fix: (compiler edit 430) The scope of PRIVATE variables is supposed to be limited to the ++include module in which they are defined. But in fact, it was extending to other ++include modules with the same name (but different extension). So for example, a PRIVATE var defined in i1.bsi was also visible in i1.inc. 2. --- XTREE bug fix: setting Dspwid for the pseudo column (default) was setting the deafult minimum width rather than the default display width. Also note that because of special considerations affecting the first and last display columns, they may not be affected by the default Dspwid. ========================================================================== A-Shell Development Notes Version 5.1.1143.2 (26 March 2009) ========================================================================== 1. --- APEX bug fix: new 2.0.0.1 version of the SftPrintPreview_IX86_A_2.0.dll fixes a problem causing the preview to crash under W2000, W98 and ME when the GDIPlus module had not been installed (typically via Windows Update). ========================================================================== A-Shell Development Notes Version 5.1.1143.1 (23 March 2009) ========================================================================== 1. --- AUI_CONTROL refinment: CTLOP_CHG with the MBST_POS state flag to resize or reposition a control now works with dialogs. Note that resizing the dialog this way doesn't not automatically resize of reposition the controls within the dialog (relative to the dialog upper left corner). 2. --- ASHNET.DLL 1.0(107) now supports XHTTPF_REQHEAD flag to request the HTTP header of the target URL. ========================================================================== A-Shell Development Notes Version 5.1.1143.0 (23 March 2009) ========================================================================== 1. --- MX_SHELLEX enhancement for server side of ATE: New waitflag bit +4 disables the normal 10 second time out waiting for the ShellExecute operation to complete. Normally 10 seconds is more than enough time to determine whether the launch was successful or not, but there are some cases, most notably under Vista when the launch requires the user to confirm "elevation", that the server was otherwise timing out while ATE was still waiting for the ShellExecute to return. In such as case, an unreliable error status was often being returned, and then when the command finally did return, the normal response code was ending up in the keyboard buffer, possibly confusing the application. Specifying the +4 flag should not have any effect on older versions of A-Shell or under non-ATE situations. Note that wait is independent of the existing waitflag option +1, which suspends ATE until the launched application completes. +4 only waits until the program is launched, not until it is closed. 2. --- ATE server-side protocol enhancement: New general purpose status code -15 indicates that ATE failed to respond to the server request within the normal time limit (5 seconds for most commands, 10-15 for a few). As described above, sometimes commands that "should" respond almost instantly, will take a long time, either because ATE is "locked up", or there is some other Windows hangup, such as waiting on "elevation" or some other critical event. In such cases, if the command normally returns a numeric status code, we now return -15 to indicate time out. These include: AUI_MENU AUI_ENVIRONMENT AUI_HTMLHELP MX_SHELLEX MX_MKDIR MX_FILESTATS MX_GDICALC MX_WINSETTINGS MX_SHORTCUT MX_CHKPCNET 3. --- AMOS-to-native filespec conversion enhancement: files with names longer than 10.3 or containing more than 1 "." are now recognized as native. Previously, if there were no other clues, these were assumed to be AMOS specs, but that resulted in them being truncated at 10.3. 4. --- MX_FILESTATS bug fix: Under UNIX, when the FOPENS trace was set and the specified file didn't exist, A-Shell aborted with a segementation fault. 5. --- AG_SPOOLCFG enhancement: when using this method to transfer binary files, ATE now displays a progress bar that visually indicates the progress to completion. (For other aux port printing, where ATE doesn't know the number of bytes to be received, the progress bar just shows continuous activity without indicating actual progress.) 6. --- MX_SHELLEX documentation fix: Aside from the -15 return code for timeout, (which is actually a new code - see #2 above), applications should be aware of return code 1223, which indicates that the user was given some kind of prompt to enable or accept the launch of the program (such as with Vista 'elevation'), and the user chose to cancel rather than allow the launch. 7. --- ATE configuration dialog cleanup (version 128): - Login text tip now helpful - FTP port now defaults correctly when protocol changes. - Use Windows edit mode (|K) ========================================================================== A-Shell Development Notes Version 5.1.1142.7 (21 March 2009) ========================================================================== 1. --- LMASCB.SBR was falsely reporting an overflow condition when the file data completely filled a string field, without room for the trailing null. ========================================================================== A-Shell Development Notes Version 5.1.1142.6 (20 March 2009) ========================================================================== 1. --- AUI_CONTROL bug fix: The MBF2_STICKY bit was not working properly when the parent window was on a secondary monitor with negative coordinates. ========================================================================== A-Shell Development Notes Version 5.1.1142.5 (20 March 2009) ========================================================================== 1. --- APEX bug fix (minor) : when printing a file whose name is of the form *#.apf, *#.exc or *#.csv, it was supposed to just print it without creating a new "serialized" apf. This was only recognizable as a problem when re-printing files from the APEX retention directory which for which there were corresponding auxiliary files of the same name. ========================================================================== A-Shell Development Notes Version 5.1.1142.4 (19 March 2009) ========================================================================== 1. --- ISAM 1.1 bug fix: there was a small chance (approximately 1 in 10K) that on any given key deletion, you would get a bogus ERF 35 (index smashed) error. ========================================================================== A-Shell Development Notes Version 5.1.1142.3 (18 March 2009) ========================================================================== 1. --- AUI_CONTROL bug fix: an unresolved side-effect of the conversion to millicolumns (5.1.1139) was allowing TAB(x,y) to delete a control positioned at (x,y) even if that control was in a non-autoparent dialog. (Normally, TAB(X,Y) should only delete unprotected controls which start at that position within the main screen or within the autoparent dialog.) ========================================================================== A-Shell Development Notes Version 5.1.1142.2 (17 March 2009) ========================================================================== 1. --- AUI_CONTROL refinement: 1141.2 patch to preserve static control background color value is now limited to BGC values with the +64 (override) flag or which are in RGB format. (Values 0-15 no longer override the tab control background color.) 2. --- XTREE column header alignment bug fix: the 1142 update had a side effect of setting the center or right justify option on all the column headers if the first column header had it. 3. --- XTREE refinement: Column format "uu" (see 1142.0) now automatically exits on ENTER, rather than acting like TAB, as it does in most other cell navigation situations. (The theory here is that uu is mainly intended for people who prefer the keyboard to the mouse, for whom ENTER would be the most natural way to "select" (i.e. exit from) the current cell. ========================================================================== A-Shell Development Notes Version 5.1.1142.1 (16 March 2009) ========================================================================== 1. --- Windows printing refinement: the printer selection dialog was being displayed as a child of the main A-Shell window. In cases where the application was really running from a dialog, this allowed the user to accidentally cover up the printer selection dialog with the application dialog, leading to what appeared to be a hung state. 2. --- .DATE (dot variable) fix: Overflow from the year (> 100 since the year was an offset from 1900) was causing the day value to be incremented by one. (March 16, 2009 was appearing as 31709 instead of 31609.) 3. --- .YYMMDD (dot variable) fix: YY now limited to 00-99, so March 16, 2009 shows as "090316" instead of "1090316". ========================================================================== A-Shell Development Notes Version 5.1.1142.0 (16 March 2009) ========================================================================== 1. --- APEX printing refinement: when the last used-printer was removed, the next APEX preview using the PROMPT printer was trying to use the last (now missing) printer, leading to an error message that users (and even dealers) where having a hard time figuring out how to resolve. It should now revert back to the Windows default printer in such a case. (Note that for user-friendliness reasons, the preview does not prompt the user to select a printer before previewing, even though the preview is technically tied to the selected printer metrics. Instead, it uses the last-used printer as a default, and only prompts when/if the user selects to actually print.) 2. --- XTREE enhancement: New cformat (column format code) "uu" - works just like "u" (editable readonly) but displays only a frame around the cell (as it always did for checkbox cells), rather than overlaying the cell with an edit or combo control. (This is just an aesthetic variation.) 3. --- XTREE enhancement: new field added to XTRCTL structure to support flags relating to column header style: ... MAP2 USRCFG,B,1 ! user save/restore cfg flags - XTUCFG_xxx MAP2 HEADERSTYLE,B,1 ! col header style flags - XTHSF_xxx MAP2 UNUSED,X,15 ! (was 16) The style flags are: !***[115] XTR'HEADERSTYLE flags define XTHSF_VCENTER = &h00 ! [115] horizontal alignment define XTHSF_TOP = &h01 ! [115] top alignment define XTHSF_BOTTOM = &h02 ! [115] horizontal alignment define XTHSF_NOTBTN = &h20 ! [115] headers are simple titles, not buttons define XTHSF_BTNSTAY = &h40 ! [115] header buttons stay down when clicked (if not NOTBTN) define XTHSF_DISABLED = &h80 ! [115] header disabled, cannot be clicked The _VCENTER, _TOP and _BOTTOM flags control the vertical alignment of the header text. (The default is XTHSF_VCENTER.) The _NOTBTN flag causes the column headers to act/look like ordinary text cells, rather than as buttons. (This will eliminate the highlighting of the column headers in editable trees, which is sometimes distracting.) The last two flags are somewhat obscure, but are documented here for comleteness. The _BTNSTAY flag causes the header buttons to stay in the down position when clicked. (Only effective when not sorting, so this is of minimal value also.) The _DISABLED flag disables the click-sensitivity of the headers (which effectively disabled sorting, so is more or less subservient to the XTF_SORT flag). (XTREE.MAP, XTREE.DEF, XTREE.SDF updated accordingly) 4. --- XTREE refinement: when navigating with the up/down arrow among editable cells, it now stops at the first or last editable cell in the column. Previously, it would jump out of editing mode back into selection mode if the last cell was not editable. 5. --- XTREE enhancement: a new flag bit in the XTR'NFSELSTYLE variable can be used to remove the dotted "focus rectangle" which normally appears around the selected item. This is now defined, along with the rest of the XTR'NFSELSTYLE values in XTREE.DEF as: !***[115] XTR'NFSELSTYLE flags define XTNFS_GRAY = 0 ! [115] inactive sel bar is gray define XTNFS_BLUE = 1 ! [115] inactive sel bar is blue define XTNFS_FRAME = 2 ! [115] inactive sel bar is frame define XTNFS_NONE = 3 ! [115] no inactive sel bar define XTNFS_NOFOCRECT = &h80 ! [115] don't display focus rect (dotted) ========================================================================== A-Shell Development Notes Version 5.1.1141.2 (14 March 2009) ========================================================================== 1. --- AUI_CONTROL bug fix: colored static text background colors were not working within TAB controls. ========================================================================== A-Shell Development Notes Version 5.1.1141.1 (09 March 2009) ========================================================================== 1. --- AUI_CONTROL MBF_TAB refinement. The adjustment to increase the max length of CTEXT in 5.1.1140 had the side effect of stripping the original CTEXT contents to the first tab label (i.e. up to the first tilde) during the parsing/tokenizing of the TAB text. In most cases this had no consequence, but to avoid the possibility that an application may have saved or reused that CTEXT contents after creating the TAB, the contents are now preserved. (Note: only affected local A-Shell/Windows, not ATE.) ========================================================================== A-Shell Development Notes Version 5.1.1141.0 (08 March 2009) ========================================================================== 1. --- SQL.SBR compatibility adjustment: Windows MySQL connector renamed from ASHMYSQL.DLL to LIBASHMYSQL.DLL. 2. --- MX_FILESTATS bug fix: addition of the new version and hash options in 5.1.1139 was causing problems with earlier versions of ATE. The extra parameters are now ignored on the server side when ATE < 1139. 3. --- New AG_XFUNCS (75) command (string variation of AG_XFUNC) ? TAB(-10,AG_XFUNCS);"sbxnam,arg1,...,argn);chr(127); input line "", RESPONSE$ The concept and arguments are the same as for AG_XFUNC, with the only difference being that the routine called the ATE side ("sbxnam"), must return a string result (as if for XFUNC$()) rather than a numeric result. ========================================================================== A-Shell Development Notes Version 5.1.1140.5 (07 March 2009) ========================================================================== 1. --- MX_CHKPCNET bug fix: was returning -1 (not available) except under ATE. ========================================================================== A-Shell Development Notes Version 5.1.1140.4 (06 March 2009) ========================================================================== 1. --- Compiler bug fix: use of sizeof() within functions and procedures was, in some cases (apparently only Linux) returning the size of a previously referenced variable. (Note that the problem was affected the hash code of the affected RUN file.) 2. --- COMPIL.EXE 5.1.429 (standalone compiler for The Editor) updated per above. ========================================================================== A-Shell Development Notes Version 5.1.1140.3 (05 March 2009) ========================================================================== 1. --- Further refinement of INFLD GUI bug fix described in 1140.2, which was still leaving some combo box drop downs too short. 2. --- AUI_CONTROL bug fix: CTLOP_INFO was truncating the returned control text at 2 bytes. (Problem introduce in 1140.0.) 3. --- AUI_CONTROL bug fix: dialog centering (MBST_CENTER, etc.) was not working properly on secondary monitors unless the tops of the monitors were aligned. ========================================================================== A-Shell Development Notes Version 5.1.1140.2 (04 March 2009) ========================================================================== 1. --- INFLD GUI bug fix: Some combo boxes were failing to drop-down properly under W2000. (The total height of the drop-down was about 1 pixel, making it look like just an underline.) Problem was introduced in 1139.3. ========================================================================== A-Shell Development Notes Version 5.1.1140.1 (03 March 2009) ========================================================================== 1. --- CGIUTL enhancement: the 16K limit on the size of a single expanded line of the template HTML file (using opcode 3 or 6) has been lifted. (It may take some ingenuity to create such long lines, but apparently some A-Shell developers feel up to the challenge.) The only limits which remain are that 32K for the length of a template line prior to variable substitution and 256 total substitution variables (which may be distributed over 96 XCALL parameters). Also, increase the default maximum size of the parameter buffer passed by the web server to A-Shell from 4K to 16K (applies only in the case where the web server does not support the CGI standard by defining the CONTENT_LENGTH environment variable; IIS seems to fall into this category.) 2. --- AUI_CONTROL bug fix: MBST_CENTER with MBF_ALTPOS dialogs was causing dialogs to be reduced drastically in width. (Introduced in 1139.) 3. --- AUI_CONTROL enhancement: New cstate flags MBST_HCENTER (&h00800000) and MBST_VCENTER (&h01000000) allow controls to be centered just horizontally or just vertically. (Specifying both is equivalent to MBST_CENTER, which should now probably be deprecated to free up a bit, although it will be a long time before we could expect to be able to reuse the bit.) 4. --- AUI_CONTROL enhancement: Although centering is mainly intended for dialogs, it now works better for controls within dialogs. (In particular, the new MBST_HCENTER flag might be useful for centering a single button at the bottom of a dialog.) ========================================================================== A-Shell Development Notes Version 5.1.1140.0 (02 March 2009) ========================================================================== 1. --- AUI_CONTROL enhancement: increase the limit on size of the CTEXT parameter, from 1024 bytes, to approximately 3500 bytes (The actual limit is about 4K, less the space used for all of the other AUI_CONTROL parameters.) The new larger limit will be mainly useful with very large TAB controls (i.e. having many tab panes). 2. --- A-Shell/SQL interface ported to Linux. 3. --- EZ-SPOOL bug fix: After using the EZVUE preview from the EZ-SPOOL, the screen was not being restored properly. 4. --- Installer bug fix: the SYS:LP0.INI file was being over-wrtten by the generic one during an install/update. ========================================================================== A-Shell Development Notes Version 5.1.1139.9 (02 March 2009) ========================================================================== 1. --- MIAMEX, MX_COPYFILE bug fix (Windows) : CPYF_SETRO and CPYF_CLRRO were not being respected in conjunction with the CPYF_MOVE option. ========================================================================== A-Shell Development Notes Version 5.1.1139.8 (02 March 2009) ========================================================================== 1. --- AUI_CONTROL bug fix: controls were ending up one pixel less wide than before the onset of millicolumns (in 1139). This was mainly noticeable in INFLD controls using ||f where the extra pixel was sometimes enough to cause the last character to be truncated. ========================================================================== A-Shell Development Notes Version 5.1.1139.6 (27 February 2009) ========================================================================== 1. --- GDI printing refinement: The printing initialization commands XOFFSET, YOFFSET, XORIGIN, and YORIGIN, did not previously work in the TEXT mapping mode. Now they do. 2. --- MX_CLIPBOARD enhancement: Previously, the amount of text that could be copied to the clipboard was limited to about 3K. While this remains the case when copying from screen coordinates, or when running under ATE (opcodes 2 and 3), for opcode 1 in local Windows mode (copying a string supplied by the application), the amount is now only limited by available Windows resources. 3. --- AUI bug fix: refine prior fix in 1137.3 relating to selection bar handling and edit mode; was causing an excessive flash and inappropriate reversion to the full selection bar when editable cells lost focus. ========================================================================== A-Shell Development Notes Version 5.1.1139.5 (26 February 2009) ========================================================================== 1. --- Fix problems with INFLD GUI non-edit controls (combos, date pickers, etc.) failing to get the automatic width expansion needed for the extra interface elements (e.g. drop-down button). (Introduced in 1139.1). 2. --- Fix problem with INFLD GUI control heights ranging between 200 and 2000 millirows, rather than the expected 1000 millirows, when the starting row was not a multiple of 1000 millirows. (Introduced in 1139.1) ========================================================================== A-Shell Development Notes Version 5.1.1139.4 (25 February 2009) ========================================================================== 1. --- Fix multi-line INFLD bug: edit box was one row too tall, and maxchars was getting reduced by a factor of 1000 (due to millicolumn related modifications since 1139). 2. --- VUE bug fix: the insert edit history (^_E) function was getting confused by programs that contained variables like VEDIT or even ATE'VEDIT, leading to incorrect edit numbers, and possible stack corruption if the edit number was > 999. ========================================================================== A-Shell Development Notes Version 5.1.1139.3 (24 February 2009) ========================================================================== 1. --- GUI bug fix: TPRINT and DPRINT were not working (side of effect of millicolumn introduction in 1139). ========================================================================== A-Shell Development Notes Version 5.1.1139.2 (24 February 2009) ========================================================================== 1. --- GUI fix for millicolumns: fix problem converting mouse capture coordinates. 2. --- INFLD is now more tolerant of millicolumn values being passed, even in the XMAX param (although that is probably still asking for confusion.) ========================================================================== A-Shell Development Notes Version 5.1.1139.1 (23 February 2009) ========================================================================== 1. --- MX_FILEPOS bug fix: Versions of A-Shell with LFS (large file) support were internally treating the layout of the array as containg 64 bit values instead of 32 bit values, which completely corrupted the use of the MX_FILEPOS function. (Including the FILIDX parameter in XTREE.) 2. --- AUI control scaling tweak: recent fixes to the scaling logic, along with the switch to millicolumns, was resulting in some dialogs (especially those displayed using MBST_CENTER) ending up a few pixels too large. 3. --- INFLD (GUI mode) now supports millicolumns in the COL (starting column) parameter. Note that the XMAX parameter must still be in integer columns (or characters), not millicolumns. (This restriction may be lifted in a later release.) Millicolumns will be rounded back to regular integer columns in text mode. ========================================================================== A-Shell Development Notes Version 5.1.1139.0 (22 February 2009) ========================================================================== 1. --- New Windows MIAMEX function MX_CHKPCNET (176) to the network state of the local PC (for A-Shell/Windows) or the ATE client: xcall MIAMEX, MX_CHKPCNET, STATUS, FLAGS STATUS [num,out] will return 1 if the PC is connected to the Internet, and 0 if it is not. -1 indicates that the function is not supported (not Windows, ATE not present, or ATE PC version too old). Note that since older versions of A-Shell would not have this function supported, you may want to pre-set STATUS to something like -99 so you don't confuse a non-updated STATUS with a real one (or, use MX_GETVER to check the A-Shell version before calling the function). FLAGS [num,out] returns flags which can be interpreted as following: &h0040 INTERNET_CONNECTION_CONFIGURED - local system has a valid connection to the Internet, but it might not be connected. &h0020 INTERNET_CONNECTION_OFFLINE - local system is in offline mode &h0010 INTERNET_RAS_INSTALLED - ? &h0004 INTERNET_CONNECTION_PROXY - local system uses a proxy server &h0002 INTERNET_CONNECTION_LAN - local system uses a LAN to connect &h0001 INTERNET_CONNECTION_MODEM - local system uses a modem to connect ATE Note: If the A-Shell on the server is 1138.3 or higher, but the ATE PC is not, the function returns STATUS = -1. 2. --- New ATE function AG_CHKPCNET (74) equivalent to MX_CHKPCNET allows you to detect the state of the ATE-connected PC'S internet connectivity from the server: ? TAB(-10,AG_CHKPCNET);chr(127) input "",FLAGS STATUS = FLAGS / 65536 ! STATUS in upper word FLAGS = FLAGS and &hFFFF ! FLAGS in lower word STATUS and FLAGS have the same meaning as in MX_CHKPCNET, but are returned combined into a single 4 byte variable in order to minimize complications if the function times out or is not available. NOTES: - MX_CHKPCNET can be called directly even on A-Shell/UNIX (1138.3 or higher), so there is no particular need to use the AG_CHKPCNET protocol except where the server side is too old (or isn't A-Shell). - If the ATE client is prior to 1138.3, this function will just hang (until the user hits ENTER), so you would do well to check the version of the ATE client (see MX_GETVER) before calling it. (That's another reason to just use MX_CHKPCNET, since performs that check for you, returning -1) 3. --- Dialog scaling bug fix: minimizing and restoring a dialog was not always preserving the exact size and position of the controls in the dialog. 4. --- Dialog minimization bug fix: Close a loophole which did allow a modal dialog to be minimized even though its parent dialog was visible but the main window was invisible. The theory here is that you should not be able to minimize a modal dialog, because that would be the one waiting for input. But if that's the only window visible for the application, then it's ok to minimize it (since it's more like minimizing the entire application.) 5. --- AUI_CONTROL enhancement: MBF2_RESIZE (&h0001000) flag may now be used with an MBF_ALTPOS dialog to allow it to be resized with the mouse. (The range of resizing is from 50% of the original dialog size to maximized.) 6. --- MX_FILESTATS enhancement to optionally return file version info and hash. New syntax: xcall MIAMEX,MX_FILESTATS,l'r,path,bytes{,mtime{,ctime{,mode{,ver{,hash}}}}} ver [out,string] returns the file version information (for RUN, LIT and SBX files only), in the format "a.b.c{.d{.e})" where a=vmajor, b=vminor, c=vsub, d=vedit, e=vpatch. Note that because this format may not be convenient for easily compariing two versions to see which is later, optionally you can retrieve the string in the format "aaaaa.bbbbb.ccccc.ddddd.eeeee" by passing a string mapped as 30 bytes for the ver parameter. Files that do not have versions will return empty version strings (rather than either of the formats described above). The function does not yet support retrieving version strings from EXE and DLL files, but that may be added in a future update. hash [out,s15+] returns the file hash code in the format ###-###-###-### 7. --- AG_FILESTATS (31) enhanced to optionally return version and hash strings, per MX_FILESTATS. The new syntax is: ? tab(-10,AG_FILESTATS);fspec{,versiz{,hashsiz}};chr(127); and the return string is of the format bytes,mtime,ctime,mode{,ver{hash}} versiz and hashsiz are numeric values representing the size of the strings you intend to retrieve them into. If 0 or not specified, then the corresponding field will not be returned. Set versiz=30 to get the #####.#####.#####.#####.##### format (see MX_FILESTATS). Note that MX_FILESTATS is generally use in preference to AG_FILESTATS, because it is easier to use (standard XCALL return values), and works in all the same cases (including ATE), with the one exception that it requires A-Shell on the server. AG_FILESTATS could be used on any kind of server. 8. --- AUI enhancement: millicolumns have now arrived, to join millirows. ========================================================================== A-Shell Development Notes Version 5.1.1138.2 (19 February 2009) ========================================================================== 1. --- Dialog scaling bug fix: fix problem that was exacerbated by the earlier fix in 1137.7. ========================================================================== A-Shell Development Notes Version 5.1.1138.1 (18 February 2009) ========================================================================== 1. --- The A-Shell server now keeps track of ATE client versions in JOBTBL.SYS, so that they can be displayed using SYSTAT/ATE (see below). 2. --- SYSTAT.LIT 3.0(159) now displays the ATE client version information, in place of the memory partition size, when using the /ATE switch. 3. --- A-Shell now supports a new optional file %MIAME%/atesetup/options.txt, which if present, may contain a single line of command line switches to be passed to the ATE update routine. By default, only the /AUTOUPDATE switch is passed (and at this point, that is the only recognized switch), but this opens the door for adding additional options, even custom dealer-implemented ones, to the update/installer. ========================================================================== A-Shell Development Notes Version 5.1.1138.0 (17 February 2009) ========================================================================== 1. --- SQL.SBR 0.1 "release" for A-Shell/Windows: SQL.SBR is really just the "hub", and requires a "connector" module to complete the connection from A-Shell to an SQL database. No connectors are officially released yet, although there is pre-release MySQL connector (ashmysql.dll) that can be made available to a limited number of beta testers. (Contact MicroSabio or stay tuned for further details.) 2. --- XTREE enhancement: New cformat code ] may be added to any column in a file-mode tree to force trailing blanks to be stripped before loading the cell. (This is automatic in array mode, but in file-mode, the blanks may be needed to preserve the interpretation of the returned selection string.) 3. --- INFLD bug fix: INFLD was failing to clear the "1-click cursor alignment" region on exit. The result was that there would in some screens be a region (one row high) where clicking would generate a bunch of chr(8) or chr(12) characters. 4. --- XTREE bug fix: The xtr'expandlevel feature was not working reliably, because some operations performed on the tree after setting up the expand/collapse level were having a side effect which caused some rows to get expanded. ========================================================================== A-Shell Development Notes Version 5.1.1137.7 (16 February 2009) ========================================================================== 1. --- `PEX bug fix: //META file transfers were not being initiated when running APEX in a second instance (as is always the case in ATE). 2. --- INFLD enhancement: TYPE ||P may be used with the security type field (S) to automatically decrypt/encrypt a password, using A-Shell's standard password encryption scheme. (See MX_PWCRYPT). 3. --- MX_PWCRYPT bug fix: it was failing to recognize non-encrypted passwords, thus "decrypting" them was instead mangling them. 4. --- Dialog scaling bug fix: MBF_ALTPOS dialogs no longer inherit any scaling from their parents. (Previously, the size of a child dialog was being affected by whether the parent dialog was normal or maximized.) ========================================================================== A-Shell Development Notes Version 5.1.1137.6 (14 February 2009) ========================================================================== 1. --- XTREE bug fix: relative image paths were not working in file mode. Even worse, very long paths were causing A-Shell to crash. 2. --- XTREE bug fix: U (application-only editable) wasn't being respected in some cases, allowing the user to edit cells by clicking on them. 3. --- AG_WINEXEC enhancement: You may now optionally pass the current working directory as a second argument (otherwise the launched process assumes the current A-Shell or ATE working directory). New syntax: ? TAB(-10,AG_WINEXEC);cmd$;chr(127); ! default working dir or ? TAB(-10,AG_WINEXEC);cmd$;"~";workdir$;chr(127); ! explicit working dir ========================================================================== A-Shell Development Notes Version 5.1.1137.5 (12 February 2009) ========================================================================== 1. --- Clean up various issues relating to the GDI //META command; APEX now displays a progress dialog while transferring a //META file, and disables the export buttons until the first page is fully displayed (i.e. after the META file transfers); also, avoid re-processing //META commands if the page is re-viewed with APEX. 2. --- AG_SHLEXEC debug refinement: when the launch fails, create a SHELLEX.LOG file with addtional details (will be in the ATE SYS: account). ========================================================================== A-Shell Development Notes Version 5.1.1137.4 (10 February 2009) ========================================================================== 1. --- APEX bug fix: fix problem where clicking on a page from within multi-page view was causing the page in the resulting single-page view to mostly outside of the window. ========================================================================== A-Shell Development Notes Version 5.1.1137.3 (10 February 2009) ========================================================================== 1. --- APEX bug fix: A patch in 1137.1 had the undesirable side-effect of disabling the "serialization" of APEX print files (that is, the appending of a unique numeric suffix on the file name so that several copies of the same file could be archived for the duration of the retention period.) 2. --- APEX bug fix: All navigational keyboard commands now recenter the page in the window, eliminating a problem where hitting, say, HOME, would sometimes result in the page being displayed outside the window, making the window appear blank. 3. --- Compiler bug fix (COMPIL 5.1.427) - Compiler was failing to detect a syntax error consisting of an excess character, like a ")" at the end of an ELSEIF line. The bug did not affect the RUN code generation, providing that the excess character was simply that, i.e. excess. 4. --- XTREE bug fix: gradiant select bar styles were getting reset back to the non-gradiant version after an editable cell. ========================================================================== A-Shell Development Notes Version 5.1.1137.2 (04 February 2009) ========================================================================== 1. --- ATE Aux Port printing refinements: Make it more difficult to accidentally terminate aux port printing (mainly with big reports). Previously, a 2 second interruption in the data flow (which could be caused by suspending ATE processing by opening the menu bar), or a CTRL+X would have closed the aux port channel, causing the remainder of the report to appear on the screen. Now, either case will prompt the user to confirm the abort, and in addition, the timeout logic is now smarter so it doesn't get fooled by ATE being busy or suspended. Also, for workstations running XP or higher and that have created any GUI objects since the start of the session, a small activity bar "marquee" will display in the lower right corner of the dialog or window during the printing. Clicking on the marquee acts like hitting CTRL+X (i.e. prompts the user to confirm that they really want to abort printing.) ========================================================================== A-Shell Development Notes Version 5.1.1137.1 (04 February 2009) ========================================================================== 1. --- APEX enhancement: The vertical arrow keys now act like PgUp/PgDn when in single page mode and we are already at the top or bottom of the page. Previous, the vertical arrows would just cease to work when you had scrolled to the vertical limit of the current page, requiring the user to switch to the PgUp/PgDn keys. Also, use of the arrow keys now restores the optimum page positioning within the window (after zooming with the mouse may have left the page position way off one edge in order to anchor the zoom to the mouse position.) 2. --- INFLD/GUI bugfix: Close a loophole in non-theme (i.e. pre-XP) environments where INFLD was still setting intermittently the background color even when the "Force Standard Colors in Edit Boxes" option (Misc. Settings Dialog) was set. This was typically causing inactive INFLD fields to display with the same background as static text. 3. --- Window resizing bugfix: Close a loophole which was intermittently leading to a GPF when resizing a window. Problem was only reported under W2000, but in theory could have happened in any environment given the right set of circumstances (which were essentially random). ========================================================================== A-Shell Development Notes Version 5.1.1137.0 (03 February 2009) ========================================================================== 1. --- APEX enhancement: Underlying DLL SftPrintPreview_IX86_A_##.dll upgraded from version 1.0 to 2.0. Currently the only new feature we are using is a minor change in the way zoom works. Previously, zooming caused the entire page to be repositioned, which generally caused the "focus" of the zoom to move around. Now, the redisplayed page is firmly anchored on the mouse, allowing you to zoom right in on single character if you so desire. ========================================================================== A-Shell Development Notes Version 5.1.1136.2 (31 Januuary 2009) ========================================================================== 1. --- INFLD refinement(?) - the internal folding operation now applies to characters 128-255 (just like the Basic UCS() and LCS() commands). Previously, only 1-127 were folded. ========================================================================== A-Shell Development Notes Version 5.1.1136.1 (29 Januuary 2009) ========================================================================== 1. --- BASORT bug fix: Correct problem introduced in 1136 in which it reported an invalid number of records when calling the sequential BASORT. 2. --- AUI_MENU enhancement: The maximum number of custom menu items has been expanded from 125 to 250. Also, when the GUI trace is active, AUI_MENU operations are traced. 3. --- DTSRCH.SBR enhancement: add trx code 486 to dts'srch'opt=23 ========================================================================== A-Shell Development Notes Version 5.1.1136.0 (29 Januuary 2009) ========================================================================== 1. --- BASORT enhancement: 3 new sort types supported (in addition to the existing 0 (string), 1 (float) and 2 (binary): 3 - Integer (I1, I2, or I4) 4 - "Natural" sort' 5 - "Natural" sort (case insensitive) "Natural" sort is based on an algorithm by Martin Pool which has spread to various other languages and attempts to mimic how humans would naturally sort strings such as "1 Main St", "10 Main St", "2 Main St". (The "natural" thing would be to sort "10 Main St" after "2 Main St", and treat 2 contiguous spaces as one, minimize importance of punctuation, etc., instead of just using the raw byte collating sequence.) The A-Shell implementation deviates slightly from the original version by Martin Pool in that it supports the LDF collating sequence, if available, and doesn't require trailing nulls on the strings. Natural sort keys should always be of type S (string). Warning about using signed integer sort keys (B5, I1, I2 and I4) in files with a control record: traditionally the technique for preventing the control record from getting sorted out of place was to temporarily set it to all nulls, prior to sorting. But this is not adequate for signed integer sort keys, since nulls = 0, which is not at the bottom but in the middle of the range of signed values. The lowest possible signed integer value is -2^N where N is the # of bits in the field (e.g. -128, -32768, etc.) Similarly, for descending sort, the maximum value is 2^N-1. 2. --- BASORT bug fix: B5 keys were not sorting as if signed. (This may have saved some applications from the problem described above with signed sort keys, so if you use B5 for sorting, you may want to double check that.) 3. --- BASORT bug fix: In very rare cases, sorting could lead to the a few empty records being appended to the end of the file. The problem occurred only in the "medium" sort, and only with record sizes not dividing evenly into 512, and even then only rarely. (In fact, it has never been reported, so apparently it is extremely rare or the addition of a few empty records didn't matter.) 4. --- BASORT enhancement: Up to 6 sort keys may now be passed to the random sort: xcall BASORT,ch,reccnt,recsiz, & k1siz,k1pos,k1ord,k2siz,k2pos,k2ord,k3pos,k3siz,k3ord, & k1typ,k2typ,k3typ, & k4siz,k4pos,k4ord,k5siz,k5pos,k5ord,k6pos,k6siz,k6ord, & k4typ,k5typ,k6typ 5. --- BASORT enhancement: The key type parameters may now be passed to the sequential sort: xcall BASORT,chin,chout,recsiz,k1siz,k1pos,k1ord,k2siz,k2pos,k2ord, & k3siz,k3pos,k3ord,k1typ,k2typ,k3typ Previously, only plain string keys were supported, so there was no need for the k?typ parameters. Now you can specify 0 for string, or 4 for natural sort, or 5 for natural case-insensitive sort. 6. --- SORTIT enhancements: Support the 3 new sort types listed above for BASORT, plus F4 and F8. Note, however, that SORTIT does not support B1 or I1 keys, and ignores the LDF collating sequence. 7. --- SORTIT bugfixes: F6 sorting was not properly handling comparisons between numbers whose difference was > 2GB or < -2GB. 8. --- SORT.LIT 1.1(104) now supports the "natural" sort option and also the fold (case insensitive) option. The options may be specified individually for each key by appending "N" (natural) and/or "F" (fold) to the A or D currently used to specify Ascending or Descending. 9. --- XTREE sorting enhancement: S fields are now automatically sorted using the "natural" algorithm (see above) and using the LDF collating sequence. (Since XTREE sorting is normally only for the benefit of display, there doesn't seem to be any particular value in preserving the original "normal" string sort.) 10. --- XTREE bug fix: xtr'nfselstyle wasn't working as documented. (The selected rows were not showing with any highlight when the tree didn't have the focus and xtr'nfselstyle was 0.) 11. --- XTREE enhancement: new DLL version 6.06 supports Windows 7 and improves: x64 support. 12. --- LDF enhancements: New LDF files (each named by appending an "X" to the existing name) have been created to add a standard Latin 1 character collating sequence for the upper 128 characters. (This may be an interim measure until we decide whether there is any reason not to just update the standard LDFs with the collating sequence. Until then, if you are interested in the collating sequence, either rename the "X" version to the standard name, or change the miame.ini ERSATZ statement to reference the "X" version of the LDF.) 13. --- GTLANG.SBR enhancement: The A-Shell extended form of the GTLANG.MAP file is now supported in order to return the upper collating sequence. (See ashinc:gtlang.map) The total size of the map is now 736 bytes long and ends like this: MAP2 LANG'SUN,x,20 MAP2 LANG'EXTEND1,b,1 MAP2 LANG'EXTEND2,b,1 MAP2 LANG'COL2,x,128 A sample program, GTLANG.BAS, is now included in the SOSLIB to illustrate it. 14. --- New MIAMEX function (174) to compare two strings in various ways: xcall MIAMEX, MX_STRCMP, s1, s2, flags, result s1 and s2 (string, in) are the strings to compare. (Only the first 256 characters will be considered.) flags (num, in) may be set to one or more of the following: STRCMPF_LDF (&h01) - Use LDF collating sequence STRCMPF_NAT (&h02) - Use "natural" compare (see "natural sort" above) STRCMPF_FOLD (&h04) - Case insensitive comparison result (signed num, out) returns the following: <0 if s1 < s2 >0 if s1 > s2 0 if s1 = s2 Notes: - With flags=0, you should get nearly the same results as in the standard Basic string comparison, except that Basic string comparison ignores trailing blanks, while MX_STRCMP only ignores them if the "natural" flag is set. - The standard Basic string comparison does not take into account the LDF collating sequence, so for example it will treat accented characters as sorting above the non-accented equivalent. - Unless you modify the LDF accordingly, the standard LDF collating sequnces do not change the order of the ASCII characters 1-127, so even with the LDF option, lower case characters are treated as being greater than upper case. - You can check the status of the collating sequences in your LDF file by using DUMP xxxxxx.LDF (the lower collating sequence starts at offset CE in the first block, and the upper collating sequence starts at offset CC in the second block). Or, you can use the updates GTLANG.BAS sample program included in the SOSLIB. 15. --- APEX bug fix: files with both explicit and implicit page breaks occurring on the same line were sometimes resulting in the last page being inaccessible to the preview, possibly even causing an infinite loop when using CTRL+END to jump to the end. ========================================================================== A-Shell Development Notes Version 5.1.1135.0 (22 Januuary 2009) ========================================================================== 1. --- XTREE bug fix: Setting a default Dspwid was interfering with hidden columns. 2. --- XTREE enhancement: New Advanced Column Definition clause DefaultScale=### works similarly to Scale, except that it affects all subsequent columns, not just the current column. Furthermore, if specified with a pseudo-column, it affects all the rows (eliminating the need to define a special font column with coldef code "f"). This makes it much easier to apply a scale factor to an entire tree. 3. --- XCALL enhancement: The maximum number of parameters that can be passed to an XCALL has been increased from 30 to 100. 4. --- XTREE bug fix: Close a loophole in which XTREE would confuse an unexpected setfocus for an inactiveclick, causing the subsequent re-entry to behave as if it was caused by clicking on the control, rather than as the application may have intended. 5. --- CGIUTL enhancement: New opcode 7 provides an alternative to opcode 2 for retrieving parameter values. Instead of retrieving one value at a time by parameter name, it retrieves several sets of parameter name=value pairs based on parameter number: xcall CGIUTL, 7, status, skipcount, parmname1, parmvalue1, & ... parmnameN, parmvalueN {,string} skipcount [num, in] should be set to the number of name=value pairs to skip. Set to 0 to start with the first parameter. status [signed num,out] returns status: -1 = specified starting parameter number (skipcount+1) doesn't exist -2 = not cgi mode and no string param passed -3 = syntax error in parameter data (last parmname arg will contain the relevant part of the string) >=0 = # of parameter name=value pairs available to process (after the skipcount). If this is larger than the number of sets of parmname,parvalue pairs passed, it indicates to the application that it can make another call (using skipcount) to get additional parameters. parmname [s,out] returns parameter name parmvalue [s,out] returns parameter value You can specify up to 48 pairs of these (to stay within the 100 XCALL parameter limit). Use the returned status to determine how many of the pairs contain valid information. (CGIUTL will also set the first ununsed parmname to "" so you could also process the pairs until the first empty parmname.) string [s,in,optional] may be used to pass a string to use as input, instead of the stdin string normally passed to A-Shell in CGI mode. Note that CGIUTL recognizes the existence of the string argument by there being an even number of arguments > 5. (So make sure your parmname,parmvalue arguments are paired or the last one will be confused with an input string). See opcode 2 for information on the format of the string input. See the forum thread: http://www.microsabio.net/ubb2/ultimatebb.cgi?ubb=get_topic&f=5&t=000841#000002 for a discussion and slightly more formatted version of this entry. ========================================================================== A-Shell Development Notes Version 5.1.1134.9 (20 Januuary 2009) ========================================================================== 1. --- XTREE bug fixes: fix problem with column 1 disappearing due to changes in 1134.8. 2. --- XTREE enhancements: The following column attributes can now be set as defaults by assigning them to the zero column: Fold= Dspmin= Dspwid= ========================================================================== A-Shell Development Notes Version 5.1.1134.8 (20 Januuary 2009) ========================================================================== 1. --- XTREE refinement: Advance Coldef clause ScrollMode=Tree may now be associated with column 0 to make it the default for all columns (rather than having to do it individually for each column containing combos). 2. --- XTREE bug fix: Some column 0 attributes were getting reset when there were multiple complete column 0 coldef statements. 3. --- XTREE bug fix: left/right arrow keys in split trees (when not in edit mode, i.e., in order to scroll horizontally) were causing A-Shell to crash. ========================================================================== A-Shell Development Notes Version 5.1.1134.7 (19 Jaunuary 2009) ========================================================================== 1. --- XGETARG bug fix: conversion from numeric types (in the caller) to S or X (in the receiving function/procedure/sbx) were allowing space for a trailing null. Thus passing the numeric value 78 to a routine expecting an S,2 parameter was resulting in "7" instead of "78". This was a pretty obscure case, and probably suggests questionable application design, but nonetheless was an A-Shell bug (since in A-Shell/Basic, strings do not need trailing nulls, and can hold numeric values, thus a two-byte string should be able to store the string representation of the number 99). 2. --- SBXINP.SBX 2.1(7) restores a bug fix originally included in 2.1(4), but lost in 2.1(6) - bug was causing it to treat certain forms as if they were character acceptance lists. 3. --- Support dropped for TER14.DLL (prior version of module underlying XTEXT). It was supercededby TER15.DLL serveral months ago, but A-Shell was still supporting the older version if the newer one wasn't present. (The cleanup is preparation for an eventual upgrade to TER16.DLL.) ========================================================================== A-Shell Development Notes Version 5.1.1134.6 (16 Jaunuary 2009) ========================================================================== 1. --- INFLD Combo bug fix: ||F and |F were both causing combo boxes to act like "fast" fields (i.e. exiting immediately upon clicking on an item in the drop-down list). This effect should be reserved for TYPE F alone. 2. --- Installer fixes and improvements: - ersatz.ini, prtxls.ini and ashelp.mdf no longer get overwritten when updating. - Help menu links updated to reference online HTML docs - Default miame.ini adjustments (was set up more for ATE than A-Shell) ========================================================================== A-Shell Development Notes Version 5.1.1134.5 (16 Jaunuary 2009) ========================================================================== 1. --- VUE bug fix (3.2(290)) - The autosave operation was sometimes causing some or all of the last line of the file to be duplicated over the current line. 2. --- ATE power-user feature: The ATSYNC mechanism can now be disabled by creating a registry item DisableFileSync (DWORD) within the current ATE profile (HKCU\Software\MicroSabio\JBCT\ATE\Hosts\profile-name\DisableFileSync) and setting it to 1. The motivation behind this odd feature is to accommodate certain "power users" (presumably developers or tech support staff) who have to connect remotely to multiple sites (running different versions of the application) and who don't necessarily want to have icons, bitmaps, subroutines, etc. synchronised to the PC each time. You are on your own to create and set this registry value, but once set, ATSYNC.LIT will abort immediately with error -4. 3. --- ATECFX.SBX 4.0(126) now detects old HKLM profiles which have been virtualized under Vista to HKCU\Classes\VirtualStore\MACHINE\SOFTWARE\... and offers to migrate them back to HKCU\Software\... The offer is only made for profiles that don't already exist in the regular HKCU or HKLM locations, and once the offer is made, regardless of the user's choice, a second option is given to delete them afterwards. (Since we are moving profiles that were originally intended to be shared by all users of the PC, into the HKCU where they will only be accessible by the current user, the idea of not deleting them after migration would be to allow the process to be repeated for other user logins. Once made, a registry value is created which prevents the offer from being repeated over and over again. You can, however, reset the switch by deleting the value HKCU\Software\MicroSabio\JBCT\ATE\Settings\MigrateVHKLM. ========================================================================== A-Shell Development Notes Version 5.1.1134.4 (15 Jaunuary 2009) ========================================================================== 1. --- XPUTARG / XGETARG bug fix: variable sizes larger than 64K were being truncated to the mod-64K value when passed back and forth between functions, procedures, and SBX routines. ========================================================================== A-Shell Development Notes Version 5.1.1134.3 (11 Jaunuary 2009) ========================================================================== 1. --- INMEMO bug fix: whenever a character is entered into the last position of the current line, INMEMO waits for the next character to decide whether or how to wrap the current line. This was working correctly except in the case where the deciding character was an ESC, in which case the cursor was advanced to the start of the next row, but the ESC was otherwise dropped. The problem wasn't serious, except in the case of MMO_SIL mode where the ESC was the last character in the TEXT string, leaving INMEMO waiting for keyboard input but without any visual clues. The first ESC now causes INMEMO exit, as it should have all along. 2. --- GUI scaling bug fix: Controls within certain nested control frames (like children of a TAB control) were not being scaled up when the dialog was maximized. (Introduced in 1134.0). 3. --- AUI_CONTROL enhancement: when a dialog is created with a non- standard background color (see 1133.1), child static and groupbox controls that omit the BGC parameter (or which set it to the default of -2 or NUL_BGC) now assume the parent dialog background by default (eliminating the need to explicitly specify the dialog's BGC parameter when creating each child. Note that this does not apply to TPRINT/DPRINT, since they effectively set the BGC to -1 to use the "current" BGC as set by TAB(-3,x). 4. --- XTREE enhancement: split and non-split trees now work better together. Previously, only one kind of tree could be operational active at one time, making it difficult to click between them. 5. --- XTREE enhancement: the range of XTREE control IDs has been extended from 0-9 to 0-31. In other words, you can now have 32 trees defined at once. (Believe it or not, the previous limit of 10 was cramping some programmers' style, although in some cases, the issue wasn't so much the need to have more than 10 XTREEs in existence at the same time, but the desire to use hard-coded reference numbers for them.) ========================================================================== A-Shell Development Notes Version 5.1.1134.2 (9 Jaunuary 2009) ========================================================================== 1. --- GUI bugfix: close loophole in which AUI_WINDOW, and possibly other GUI query operations would return incorrect results, or even crash due to divide-by-zero, if called before any controls were created. (Problem may have only started with 1134.0) ========================================================================== A-Shell Development Notes Version 5.1.1134.1 (8 Jaunuary 2009) ========================================================================== 1. --- XTREE enhancement: new flag values in XTR'EXPANDLEVEL field may be used to save and restore the expand/collapse status of every row to when re-entering with XTROP_REPLACE: XTEXPF_SAVE (&h40) Save current expand/collapse status on exit XTEXPF_RESTORE (&h80) Restore saved status (on XTROP_REPLACE reentry) (The symbols are defined in XTREE.DEF.) Note that XTEXPF_SAVE can be used with any of the existing values in XTR'EXPANDLEVEL to start out with the specified uniform level of expansion but save the user-modified status on exit. But XTEXPF_RESTORE overrides all other options (unless there was no previously saved status, in which case XTEXPF_RESTORE is ignored). NOTE: the assumption here is that the XTROP_REPLACE re-entry isn't rearranging any of the rows, since the expand/collapse status is only associated with the row numbers as displayed; changing the sort on re-entry would mix it all up. ========================================================================== A-Shell Development Notes Version 5.1.1134.0 (8 Jaunuary 2009) ========================================================================== 1. --- Fix INMEMO bug: Control+E in MMO_DPG mode led to vertical scrolling anomalies. 2. --- Compiler bug fix (425): Use of sizeof(var) within a block of code that was being skipped due to conditional compilation was nevertheless complaining if the var wasn't previously compiled. 3. --- ISAM-A fix/refinement: Remove 2GB limit on IDX files. (Previously only ISAM DAT files could exceed 2GB.) Also, don't rewrite the IDX header during UPDATE'RECORD if keys don't change (minor optimization in most cases; major optimization for EFS mirroring.) New library version 6.11l. 4. --- GUI refinement: Maximized dialogs no longer cause their child dialogs to be affected in size. (Previously, a normal dialog launched from within a maximized dialog was likely to be scaled way up.) 5. --- XTREE refinement: It is not recommended that you include binary fields in the data array, even if those fields are not referenced in the COLDEF, because certain byte values can get misinterpreted as part of the ATE command packaging. That said, people do it anyway, and this patch fixes a problem with some those binary values causing the data load to end prematurely. (Note that the fix only applies on the ATE server side, not the workstation side.) ========================================================================== A-Shell Development Notes Version 5.1.1133.5 (2 Jaunuary 2009) ========================================================================== 1. --- XTREE enhancement: New XTR'SELECTAREA flag XTRSEL_STY_NONE (&h20) effectively eliminates the blue selection bar, in which case the only indication of which is the current item will be a dotted outline around the contents of the first cell. Why would anyone want to make the selected item hard to see? Because in trees which operate more as grids, the blue highlighted cell in the first column may be confusing or aesthetically incongruous. Note that this only applies to single-select trees. 2. --- Victorex subroutine technical update (fix glitch in call table) 3. --- INMEMO bug fix and tracing improvement: (same as 5.0.1000.6) - close UNIX loophole in which an unexpected return value from the lock routine could cause INMEMO to loop while waiting but without checking for the ESC option to abort the wait. Also, the XTREE TRACE now logs failed locking attempts within INMEMO, along with other INMEMO operations. 4. --- VUE bug fix (289): CRNL was not working properly when entered in VUE command mode. (It was working fine when specified in the ini.vue) 5. --- UNIX disconnection bugfix: close timing loophole which was causing some telnet disconnects to result in error 1 instead of error 250. 6. ========================================================================== A-Shell Development Notes Version 5.1.1133.4 (31 December 2008) =========================================================================== 1. --- Environment variable resolution refinement: ATE-related environment variables (e.g. ATECACHE, ATEPERMCACHE) are now recognized by any instance of A-Shell that is aware of an ATE configuration (i.e. via the -atecfg cfgname command line parameter). Practically speaking, this means that child processes launched by ATE (such as APEX, or the File>Open Local Session menu function), now understand filespecs containing ATE environment variables such as %ATECACHE%. This is particularly useful for the //META,FTP GDI directive, which is often processed by APEX in a child instance of ATE (and therefore previously didn't understand %ATECACHE%). 2. --- AUI_CONTROL enhancement: new variations of MBF_STATIC support rounded rectangles and ellipses, via new CTYPE2 flags: ! *** [170] Additional styles (ctype2) define MBF2_NOTHEME = &h00000100 ! [186] disable themes for this ctl define MBF2_CUSTDRAW = &h00000200 ! [186] custom draw the control define MBF2_ROUNDRECT = &h00000400 ! [186] (STATIC) rounded corners define MBF2_ELLIPSE = &h00000800 ! [186] (STATIC) ellipse/circle MBF2_NOTHEME disables the theme (aka "visual style") for the control. Note that it no longer has the other effects described under 1133.3 - for those, you must set MBF2_CUSTDRAW. MBF2_CUSTDRAW causes A-Shell to draw the control, rather than let Windows draw it. Generally this is a bad idea (a lot of work, guaranteed never to match the way Windows does it). But, sometimes it is useful, in order to implement a visual variation that Windows does not support. Currently there are only two control types this applies to: MBF_GROUPBOX (described under 1133.3) and MBF_STATIC. In the case of MBF_STATIC, the MBF2_CUSTDRAW flag allows us to create variations of the standard rectangular static control (rounded corner rectangles, ellipses, circles, and controls with a border matching the text color.) To get any of these effects, combine MBF2_CUSTDRAW with one of the folllowing: MBF2_ROUNDRECT causes the corners of the static control be be slighly rounded. This is only noticeable if the BGC parameter is set to an RGB value, or if the WS_BORDER flag is used. MBF2_ELLIPSE causes the control to have an elliptical rather than rectangular shape. As with MBF2_ROUNDRECT, the effect is invisible unless you define a non-standard BGC value, or use the WS_BORDER flag. If the display width and height of an ellipse are equal, you have a circle. Unfortunately, at present, there is no good way to calculate how many columns are needed to match a particular number of rows or millirows, so circles may end up as ellipses. (Actually, you could use the MBF2_PIXCOORD flag to specify the dimensions in pixels, and that would work, but leads to a different problem which is how to calculate the desired number of pixels. (We may need to add another flag to force the width of the ellipse to match the height so that you end up with a perfect circle, regardless of the window aspect ratio or resolution.) A test program, STATICX.BP[908,24] illustrates some of the new variations. =========================================================================== A-Shell Development Notes Version 5.1.1133.3 (30 December 2008) =========================================================================== 1. --- Update Victorex private subroutines. 2. --- Define MBF2_NOTHEME (&h0000100) to disable theme (visual style) for the control. In the case of MBF_GROUPBOX, this also causes the control to be manually drawn by A-Shell rather than by Windows, allowing the FGC and BGC values to be taken into account. (Otherwise, the themed version of a groupbox ignores the FGC value, and only applies the BGC value to the background of the text.) Note that for the new implementation, you must use an RGB value for FGC and/or BGC if you want custom colors. (For black, you should use &h00010101 rather than &h00000000 to avoid any confusion with palette color numbers, which range from 0-15.) ========================================================================== A-Shell Development Notes Version 5.1.1133.2 (29 December 2008) =========================================================================== 1. --- GDI print bugfix: any occurence of "%" in a printline was being treated as if it were "%#" and converted to the total number of pages. (Problem introduced in 1131.6). 2. --- AG_GETSHELLPATH bugfix: if the requested directory value was not defined, the function was returning garbage instead of an empty string. ========================================================================== A-Shell Development Notes Version 5.1.1133.1 (28 December 2008) =========================================================================== 1. --- AUI_CONTROL enhancement: The BGC (background color) parameter may now be used with MBF_DIALOG to override the normal Windows dialog background color. BGC must be specified as an RGB value, i.e. &h00bbggrr (where bb, gg, and rr are hex values from 00 to FF for blue, green and red). Note: specifying a non-standard dialog background color does not automatically change the default background color of the controls that go into the dialog, so you'd probably want to pass the same BGC value to each control (particularly static text controls) created within it. ========================================================================== A-Shell Development Notes Version 5.1.1133.0 (27 December 2008) =========================================================================== 1. --- XTREE bugfix: XTF_HOME and XTF_END were not working (i.e. the tree was not exiting) unless the HOME or END key was struck while the CTRL key was down. 2. --- XTREE enhancement: ExitChars= now supports control characters, using the ^ character as a leadin. For example, "ExitChars=ABCD^S^Z" would exit on A,B,C,D plus CTRL-S and CTRL-Z. 3. --- INFLD/ATE bugfix: ||f (fixed pitch font) was not working with opcode 2 (display mode) under ATE. 4. --- SIGHUP handling bugfix: A timing loophole was resulting in the application getting Basic error 1 instead of 250, in some cases. 5. --- INIX.SBR 5.0(508) bugfix: module names with spaces in them were causing spurious errors during write operations. 6. --- GDI printing enhancement: New printing directive //META,args can be used to embed unspecified meta data in the printfile. The //META lines will not print or display in APEX, but will remain in the file, possibly of use to archival or other post-printing routines. Currently there is only one special //META command that means anything to A-Shell: //META,FTP,direction,Hostpath,Localpath If the FTP META command is seen by APEX running within ATE, it will attempt to perform an FTP transfer of hostfile to/from localpath, depending on the direction code, which should be one of (0,1,2,3,A,B,C,D) - as used by AG_FTP (see the Dev Guide for details.) Hostpath should be in native format, to be understood by the FTP server on the host. Localpath should be in PC format, or it may use the special syntax "@.xxx" where xxx is the desired file extension. The "@." will be replaced by the complete filespec of the file currently being printed or previewed, minus its extension. This is useful for sending printfile sidecar files which will be matched up later based on having the same filename, but where you don't know the complete filename that will be assigned by ATE or APEX to the printfile. (ATE/APEX typically create versions of the original file, in the Documents\APEX directory, with a unique numeric suffix.) Note: since //META will not be recognized by A-Shell versions prior to 5.1.1133, the syntax //;META,... is also allowed. (//; indicates a comment line normally, so A-Shell will not display the line, but 5.1.1133+ will still recognize it.) =========================================================================== A-Shell Development Notes Version 5.1.1132.3 (19 December 2008) =========================================================================== 1. --- GDI printing bugfix: //TEXTINDENT,x,y was not resetting the internal line counter, thus leading to spurious page breaks when the number of lines output on a page was more than the nominal lines-per-page figure. ========================================================================== A-Shell Development Notes Version 5.1.1132.2 (18 December 2008) =========================================================================== 1. --- XTREE bug fix: expand the bug fix in 1132.0 involving read-only editable to include all editable cells. 2. --- PDFX Email.Type,4 refinement: the %TEMP%\smtp.log file is now automatically rolled over to smtp.001 when it reaches 10MB. 3. --- APEX refinement: files with .exc extensions are treated as not requiring pre-processing (similar to .apf and .csv); this is something of a hack to support an exotic PRTXLS configuration where printfiles are generated in two forms, one "formatted" and one "tabulated" (with an .exc extension) and passed to APEX/PRTXLS in tandem. In such a case, the retention directory would have both the .apf (preprocessed version of the formatted printfile) and .exc, and if the user selected to re-preview the exc, we wouldn't want to replace the original formatted .apf. ========================================================================== A-Shell Development Notes Version 5.1.1132.1 (16 December 2008) =========================================================================== 1. --- XTREE bug fix: 5.1.1132.0 was returning exitcode -51 for all non-keyboard (i.e. mouse) exits. (Major problem!) ========================================================================== A-Shell Development Notes Version 5.1.1132.0 (16 December 2008) =========================================================================== 1. --- XTREE bug fix: clicking on a read-only editable cell was setting the XROW/XCOL return variables to the clicked-on cell, rather than on the cell that previously had the focus. (Bug was introduced in 5.1.1116.0) 2. --- XTREE enhancement: New COLDEF clause may be used to define a set of characters that will force an exit from the tree: ExitChars= where can be any combination of the following characters: 0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ Notes: - The alphabetic characters are not case sensitive. - Does not apply when in cell editing mode - The exitcode will be set to -51. - XTR'XNAVCOD will be set to the actual character entered - The feature is not currently column-sensitive 3. --- COMPILER bug fix (edit 424): ++EXTERN VAR,STRUCTNAME was effectively creating a local copy of all of the fields within the structure, rather that what was surely intended (i.e., a declaration of all the fields in structure as being available for external reference. 4. --- AUI_MENU enhancement: to speed up a large sequence of menu operations over a slow ATE link, you can set the STATUS parameter to "" to eliminate the return of the status code. (Same idea as with AUI_CONTROL). =========================================================================== A-Shell Development Notes Version 5.1.1131.9 (15 December 2008) =========================================================================== 1. --- XTREE bug fix: Close GPF loophole when COLDEF param more than 1024 bytes. 2. --- XTREE bug fix: The Dspmin= advanced COLDEF clause was persisting beyond the current tree, causing columns in subsequent trees to be affected (even un-hiding hidden columns in some cases). 3. --- XTREE bug fix: A problem in XTROP_PRINT was causing a sort of infinite loop. ========================================================================== A-Shell Development Notes Version 5.1.1131.8 (10 December 2008) =========================================================================== 1. --- XTREE Print/Preview Function bug fix: now prints more closely to how the columns are displayed. Previously, the columns were too wide, causing only the first couple of them to be displayed in the print/preview. 2. --- XTREE new COLDEF clause: Title= The title string is currently only used as a page head and window title when using the XTREE print function. ========================================================================== A-Shell Development Notes Version 5.1.1131.7 (10 December 2008) =========================================================================== 1. --- Email.Type.4 bug fix: The Email.LogFile option was not supporting regular AMOS-style filespecs. The default remains OPR:SMTP.LOG ========================================================================== A-Shell Development Notes Version 5.1.1131.6 (09 December 2008) =========================================================================== 1. --- GDI printing bug fix: "%#" was not getting converted to the total # of pages if the file was not first previewed or pre-processed by APEX. 2. --- A spurious annoying warning message about not being able to find the .ash file has been eliminated. It occurred on new installations up until a user-private .ash file was first saved. ========================================================================== A-Shell Development Notes Version 5.1.1131.5 (08 December 2008) =========================================================================== 1. --- MX_WINSETTINGS now supports op 3 (see AG_WINSETTINGS in 1131.4 below). Also, both MX_WINSETTINGS and AG_WINSETTINGS now support a new field, AWS_CHARSET (20) to set and retrieve the current display character set. Valid choices are 0 for ANSI and 255 for OEM. Note that the character set is usually established in the MIAME.INI (default is OEM) with the FONT=fontname,charset command. Once set, changing fonts doesn't usually change the character set. 2. --- Settings file (.ash) enhancement: the character set is now saved and restored, overriding the character set established in the MIAME.INI. 3. ---- Font selection refinement: selecting the new Vista monospaced font "Consolas" now automatically sets the character set to ANSI. (This is an exception to the behavior just noted above in which changing fonts doesn't usually affect the character set. The reasoning here is that Consolas is destined to become a popular font, yet is doesn't support OEM at all, which would result in some other font being selected in order to satisfy the OEM character set, most likely with horrible results. So in this case, we set ANSI automatically.) By the way, despite OEM being the default, ANSI is almost always a superior choice. 4. --- ATE printing refinement: When ATE receives a file to print via the AUXLOC: device, it stores the file in the My Documents\APEX directory, appending a -# suffix to the name to make it unique. (This way, if you reuse the same report file name, APEX will be able to keep unique copies for reprint/review purposes.) So, for example, if the application printed a file call "abcdef.prt", ATE might store it as "abcdef-3.prt". In the case of APEX, the file may then be converted to "abcdef-3.apf" (APEX performs some preprocessing on the file to facilite paging operations.) Previously, there was no guarantee that the suffixes of those two files would be the same, which caused some complications for applications that try to either trace files through the printing process, or which need to send auxiliary files to be associated with specific print files by name. Now, ATE assigns unique suffixes in such a way that they do not conflict with any existing APEX apf files, and thus APEX does not have to reassign the suffix. 5. --- TAB(-10,AG_FTP) enhancement: you can now request that the pc file name be set to match that assigned to the last file printed via the AUXLOC: channel, by specifying a PC filespec ending in "-#." + the extension. For example, TAB(-10,AG_FTP);"0/tmp/abcdef.dat~%abcdef-#.dat";chr(127); This will send the file /tmp/abcdef.dat to the PC, where it will given the full spec ??????.dat, where ????? is the complete path of the last printfile captured by ATE (minus the extension). Note that the only part of the PC filespec which matters in this case was "-#.dat"; including the "abcdef-#.dat" only serves as a fallback if the version of ATE doesn't support the feature, or there was no prior printed filespec to refer to. This trick can be useful for sending metadata files which should be associated with printfiles, perhaps containing routing or archiving instructions. 6. --- ATE printing refinement: A new virtual printer, "NULL", can be specified in order to get the normal file capture and assignment of unique name in the APEX holding directory, without actually printing. You can use this technique to reverse the order described above, sending the metadata file first and then the print file, in this case using the "-#" suffix on the print file itself (in order to make it match up with the previously sent metadata file). =========================================================================== A-Shell Development Notes Version 5.1.1131.4 (05 December 2008) =========================================================================== 1. --- INFLD GUI bug fix: Combo mode was not supporting SBR=INFLD_GUISELPOS properly, causing it to return EXITCODE=7 for left arrow in some cases, instead of EXITCODE=2. 2. --- File Save (settings) dialog refinement: The dialog was misleading in indicating that the settings were loaded from %APPDATA%\... (user settings) even when that file didn't exist and the settings were actually loaded from the shared %MIAME%\<profile>.ash or default.ash. 3. --- TAB(-10,AG_WINSETTINGS) enhancement: you may now load settings from a specified file using the following syntax: ? tab(-10,AGWINSETTINGS);"3,";NEW'SETTINGS'FILE$;chr(127); input "",NEW'SETTINGS'FILE$ Where NEW'SETTINGS'FILE$ is a partial spec (like "user.ash") or a complete filespec (like "%APPDATA%\ATE\new.ash"). The return value will be set to the spec of the .ash file that was actually loaded (if the requested file was not found, it will try to load one of the defaults). Overall the operation is equivalent to using the File > Load Settings... menu. 4. --- TELNET.LIT 2.0(135) now uses the above function to reload the window settings after you select a connection profile, allowing the previously saved settings from that connection to be restored. Previously, the session saved settings were not being restored unless you used a desktop shortcut that explicitly specified the connection profile name (so it would bypass the dialog allowing you to select a connection.) 5. --- Compiler enhancement (edit 423): maximum # of levels of ++include nesting increased from 3 to 13. 6. --- XTREE bug fix: Clicking on certain empty areas within an inactive XTREE was giving it the focus but not sending the activation click string/exitcode. ========================================================================== A-Shell Development Notes Version 5.1.1131.3 (03 December 2008) =========================================================================== 1. --- Windows printing bugfix: FORMFEED=OFF was being ignored for passthrough mode. ========================================================================== A-Shell Development Notes Version 5.1.1131.2 (03 December 2008) =========================================================================== 1. --- Windows command line processing bugfix: Under certain circumstances, a filespec appearing on the command line with an embedded "\n" was being confused with a newline, causing the filespec to be broken in two and some kind of confusing error message about a file not found to result. Also, ATE and default command lines were being truncated at 15 tokens. This has been increased to 31, to allow for very complex command lines. ========================================================================== A-Shell Development Notes Version 5.1.1131.1 (01 December 2008) =========================================================================== 1. --- TAB(-10,AG_FTPSYNC) now supports hash codes as a way of making sure whether the files are different or not. (If they are different, then the server version should be copied to the client.) Previously the decision was based only on the file size being different, or the server file date being newer than the pc file date. 2. --- ATSYNC.LIT 1.0(107) supports the hash code feature just mentioned. Also, it now works from within a CMD or DO file. Previously, the CMD file interfered with the input of status responses coming from the ATE client, causing it to act as if no files needed transferring. 3. --- INMEMO.SBR bug fix: The "MEMO LOCK - Hit ESCAPE to abort" message was not being fully cleared once the lock was freed. More importantly, if the job waiting on the lock was using MMO_SIL (silent) mode, it would appear to never come out of the wait if you tried to ESC. 4. --- ATE/VUE bug fix: The keyboard was getting locked at the start of a VUE session, requiring manual release via the Settings menu. (Not sure when this was introduced.) ========================================================================== A-Shell Development Notes Version 5.1.1131.0 (29 November 2008) =========================================================================== 1. --- INSTR() bug fix with regular expressions: was returning 0 when the starting pos was more than the length of the pattern string. 2. --- Compiler fix: SIZEOF(VAR) was not recognizing VAR when it was local or private. 3. --- ATE server based licensing bug fix: it now allows the server and client to be one day apart (which often occurs when spanning timezones). Previously it would connect but would complain about the date mismatch and would not retrieve the license from the server. ========================================================================== A-Shell Development Notes Version 5.1.1130.9 (28 November 2008) =========================================================================== 1. --- Windows printing bugfix: the STRIPFF option was not working (broken in early 5.1). 2. --- ATE config dialog bug fix: changing the transport option from TUNNEL to TELNET was leaving an internal SSH flag set that was causing TELNET.LIT to launch the tunnel instead of a direct telnet connection. Fix is in ATECFX.SBX 4.0(120). Also, transport port numbers weren't defaulting in a user-friendly way. 3. --- ATE installer bug fix: it was ignoring the user response to the program folder and LDF choice (and always using "ATE" and "ENGLSH.LDF"). 4. --- PRTXLS.SBX 1.0(137) fixes a problem with numbers having 4 digits to the right of the decimal point showing up in the spreadsheet as integers. ========================================================================== A-Shell Development Notes Version 5.1.1130.8 (27 November 2008) =========================================================================== 1. --- Runtime enhancement: .ARGCNT now retrieves the # of arguments passed to an SBX, without any need to ++include xcall.bsi previously. It returns -1 if the current program was not called as an SBX. Note that the .ARGCNT variable gets replaced by the next Function, Procedure or SBX call, so it should be tested immediately at the start of a routine, and the results saved if needed later in the routine. 2. --- PRTXLS.SBX enhancement: remove the internal limit on the maximum width of the report that can be parsed for column analysis. Note that the PRTXLS.SBX has its own limit, which was 360 up through edit 135, and 720 starting in edit 136. 3. --- xMASCB.SBR enhancement: improve detection and reporting of overlow errors. ========================================================================== A-Shell Development Notes Version 5.1.1130.6 (20 November 2008) =========================================================================== 1. --- Runtime refinement: .ARGCNT now works for SBX args as well as function/procedure args. Note however that it only holds the number of args for the last SBX or function or procedure, and gets overwritten by the next. 2. --- INFLD/GUI bug fix: numeric fields with the value range option (v) were displaying as combo boxes rather than as regular edit fields. 3. --- EZTYP bug fix: A memory leak was eventually causing A-Shell to run out of memory handles (after a hundred or so EZTYP operations in a session). 4. --- ISAM 1.1 bug fix: Some old ISAM 1.0 files generated under AMOS were being misinterpreted as having more than 3 IDX levels. Now, any IDX files not generated under A-Shell 5.1, or which do not have the index type flag IDXTYP_ASH51 (&h0080) set, will be treated as standard 3-level IDX files. Note that ISMDMP file/V displays the index type in octal, so IDXTYP_ASH51 shows as 200+. 5. --- XPUTARG bug fix: XPUTARG N,VAR was clearing the target variable when the source variable was actually the same as the target variable and the type was binary. This is a pretty exotic situation (since it requires that the VAR variable being global, in which case why use XPUTARG to return it), but would have led to difficult-to-find bugs. 6. --- XGETARG bug fix: Same situation as above, except when getting a string or unformatted variable into itself. 7. --- AUI_CONTROL bug fix: Changing the enable/disable state of a checkbox using CTLOP_CHG was causing the checkbox checked/unchecked state to reset if the CFUNC parameter not passed to AUI_CONTROL. (This can occur in Leo with "CSTATE Controls".) =========================================================================== A-Shell Development Notes Version 5.1.1130.5 (09 November 2008) =========================================================================== 1. --- Runtime fix: RESUME WITH_ERROR (within function or procedure error trap) was not setting the error code when compiled in /A mode. 2. --- Runtime refinement: XREAD and XWRITE no longer generate a record size overflow error (#15) when specified variable is larger than that specified as the record size in the open statement. Instead, the operation is simply truncated to the specified record size. This makes creation of generic file i/o routines much easier. =========================================================================== A-Shell Development Notes Version 5.1.1130.4 (08 November 2008) =========================================================================== 1. --- ASHNET.DLL 1.2.104.0 fix: HTTP.SBR was failing to work properly in some cases unless the xHTTPf_DEBUG flag was set. 2. --- ATE refinement: Passing a printer name with an explicit .PQI extension was confusing the printer selection logic, causing to ignore the specified printer and use the implicitly defined printer from the Connection Properties Printer tab dialog settings. (You don't normally specify the .PQI extension on a printer name, but the situation arises in newer versions of ATE since the printer selection drop-down lists printer init files, with the .PQI extension, in addition to the Windows printer names.) 3. --- TELNET.LIT 2.0(134) bug fix: A mixup in the LITMSG.USA message numbers was causing it to display the description of the "/F ..." switch rather than the message confirming the load of the PFK file. Note that the LITMSG.USA file was also updated at the same time (to fix usage of a duplicate message number, 009,010). =========================================================================== A-Shell Development Notes Version 5.1.1130.3 (06 November 2008) =========================================================================== 1. --- File > Save dialog locations were not right when explicit -o specified. 2. --- Clicking on the copyright message now dismisses it. Also, fix ATE problem with two copies of the Copyright message dialog being active at once (one local, one initiated by the server), leading to a situation where one wouldn't go away. 3. --- MIAMEX, MX_PWCRYPT enhancement: optional type argument allows you to create the original 7-bit style password encryption used by earlier versions of ATE, in addition to the newer 8-bit style. The two types of encrypted passwords can be distinguished by the first byte - chr(1) indicates type 1 (7 bit), while chr(2) indicates type 2 (8 bit). xcall MIAMEX, MX_PWCRYPT, CLEARPW$, CRYPTPW$ {,TYPE} By default it uses type 2. 4. --- ATSDSRV.EXE Update - Supports new ATSDSRV.INI parameters Restart and CheckProcessSeconds to monitor the ATSD process and restart it if it dies. See the updated ATSSG.CHM for more details. 5. --- ATSD.EXE 5.1.106.0 update: Improved Vista compatibility, and it now supports %env% variables (typically %MIAME%) in the CONAME= spec of the miame.ini file. (Newer installations use this technique in the miame.ini to avoid having to modify the miame.ini based on the installation directory.) =========================================================================== A-Shell Development Notes Version 5.1.1130.1 (03 November 2008) =========================================================================== 1. --- New AUI_CONTROL / AUI_MENU option: The control click event can now call an SBX by setting the MBF_CMDLIN flag and setting the CMD string to: SBX:sbxnam,arg1,arg2,...argN Note that other than the "SBX:", this is essentially equivalent to the XFUNC syntax, but unlike XFUNC, the return value of the SBX is ignored. Also note that the current state of A-Shell or ATE is suspended while waiting for the SBX to return, so it is probably only a good idea to use this with modal functions that are reasonably limited in scope. (Using it to launch an entire application, which in turn may get nested by subsequent launches is likely to burn up a lot of stack space; using the traditional CMD = "$ASHELL ..." to launch a new instance would be preferable in that case. 2. --- Minor ATE cleanup: - Eliminate a spurious demo licensing message during connection profile editing. - Changing the top and bottom status line options on the connection properties dialog now takes effect immediately. =========================================================================== A-Shell Development Notes Version 5.1.1130.0 (02 November 2008) =========================================================================== 1. --- New XCALL HTTP (Windows only) to handle various kinds of HTTP requests: XCALL HTTP, OP, STATUS, FLAGS, URL, REQUEST, RESPONSE Where OP [num, in]: 1 (XHTTPOP_REQ) = general HTTP request STATUS [signed num, out] 0 = ok (for simple functions) >0 = response code returned from HTTP server (generally means that operation succeeded in communicating with the server; whether that represents an unqualified success will depend on the application and the body of the response.) <0 = Operational errors (see ASHINC:HTTP.DEF HTTPERR_xxx) FLAGS [num, in] sum of options flags (see ASHINC:HTTP.DEF XHTTPF_xxx) define XHTTPF_SSL = &h0001 ! use SSL define XHTTPF_REQPOST = &h0002 ! tells upload routine to use POST format define XHTTPF_REQUPLOAD = &h0004 ! upload files (variation of POST) define XHTTPF_REQHEAD = &h0008 ! Makes the request a HEAD request define XHTTPF_REQXML = &h0010 ! Makes the request a POST using text/xml content define XHTTPF_REQGET = &h0020 ! Simple GET (text of HTML page) define XHTTPF_REQPUT = &h0040 ! Simple PUT define XHTTPF_DOWNLOAD = &h0080 ! Download a file define XHTTPF_FILEREQ = &h0100 ! request arg is a filespec (or list of) not a string define XHTTPF_FILERESP = &h0200 ! response arg is a filespec not a buffer define XHTTPF_DEBUG = &h0400 ! outputs copy of generated request to DEBUG.REQ define XHTTPF_HDRBODY = &h0800 ! parse file into headers (added individually) and body define XHTTPF_PARMBODY = &h1000 ! like HDRBODY but use AddParam instead of AddHeader define XHTTPF_SETFROMURL= &h2000 ! Extract path and form info from URL define XHTTPF_FORCEXFR = &h4000 ! File parms are server-relative; xfer to PC URL [str, in] Fully qualified URL, with optional path and/or {:port}. Eg: "http://www.microsabio.net/dist/51dev/temphold/junk.zip" "https://www.paypal.com" "http://someserver.com/some/path:10080" REQUEST$ [str, in] Contains content of the request, for operations that require it, such as uploading files, POST, etc. Depending on XHTTPF_FILEREQ flag, may be a string buffer or a filespec (preferably native). For the XHTTPF_REQUPLOAD option, can be a list of filespecs with semi-colon delimiter. Note that some options only work with file mode, while some may only work with string mode. RESPONSE$ [str, in/out] Body of the response. Depending on XHTTPF_FILERESP, it is the filespec (preferably native) of a file, or a string buffer to return the response in. For errors that return STATUS<0, it may contain debugging text about the error rather than the actual response. Notes: If intending to use this routine this via ATE from a UNIX server, you should stick with the file mode. =========================================================================== A-Shell Development Notes Version 5.1.1129.2 (31 October 2008) =========================================================================== 1. --- XTREE bug fix: date columns would only sort in one direction. Was broken in 5.1.1126.0 (while "improving" the support for flexible date/time formats). =========================================================================== A-Shell Development Notes Version 5.1.1129.1 (30 October 2008) =========================================================================== 1. --- ATE enhancements: Support new ATE profile emulation-related option: Top / Bottom Status Disable field attributes (OPTIONS=NOFLDATTR) No space attributes (OPTIONS=NOSPACEATTR) Caps lock Tokenize GUI text (OPTIONS=GUI_SPC_IND) =========================================================================== A-Shell Development Notes Version 5.1.1129.0 (28 October 2008) =========================================================================== 1. --- Compiler/language enhancement: ++PRAGMA FORCE_FSPEC <fspec> Similar to FORCE_EXT <ext>, this pragma allows you to change the name of the output file generated by the compilation. The name you specify may optionally contain an extension (in which case it overrides the extension previously established by default or by prior pragmas), and it may be in native or AMOS format. It may also contain "%s" to indicate the simple name of the current source file. (This allows you to use a common pragma, perhaps via a ++include, which specifies an alternate location for the run file.) Note that in all cases the filespec should be quoted. Examples: ++PRAGMA FORCE_FSPEC "fred" ++PRAGMA FORCE_FSPEC "BAS:MYNAME.RRR" ++PRAGMA FORCE_FSPEC "/vm/miame/run/abcdef" ++PRAGMA FORCE_FSPEC "NEWRUN:%s" 2. --- Compiler/language enhancement: ++PRAGMA FORCE_OLD_ISAM <boolean> This is the equivalent of /I, causing the compiler to assume ISAM 1.x for OPEN statements that are otherwise ambiguous. Unlike /I, it can be turned on and off for different sections of the source code. Example: ++PRAGMA FORCE_OLD_ISAM "TRUE" 3. --- Compiler/language enhancement: ++PRAGMA FORCE_IEEE <boolean> This forces an floating point variable which does not have an explicit size to be treated as F,8 (rather than F,6). Also requires /X:1 or higher. 4. --- Compiler enhancement: RETURN within a Function or Procedure is now flagged as an error, unless there was a prior CALL <label> within that same function/procedure. (It probably should be an error regardless, but technically it is legal to nest a traditional GOSUB-type routine within a proper function or procedure, in which case a RETURN would be needed.) Previously, trying to execute such a dangling RETURN was likely to disappoint. 5. --- AUI_MENU enhancement: new opcode MNUOP_RST (7) can be used to reset the main A-Shell menu back to the way it was when A-Shell was first launched: xcall AUI, AUI_MENU, MNUOP_RST, 0, MNU$, 0, 0, "", """, STATUS As with other AUI_MENU commands, STATUS will be set to 0 on success. But on failure, it will return the negative version of the OS error #, which you can translate using MX_ERRNOMSG. MNU$ can be "" for the standard menu (aka "MIAMEMENU") or you may select a language specific menus by specifiying "MIAMEMENU-xxx" where xxx is the LDF language definition (e.g. "SPA", "ITA", "POR", "FRE", "CDN" etc.) If there is no specific menu for the requested language, the default version (American English) will be used. In this case, the return status will be -2 (indicating that the requested menu was not found). In the case of ATE, the menu items will be reset to the way they are at the start of an ATE connection. =========================================================================== A-Shell Development Notes Version 5.1.1128.2 (26 October 2008) =========================================================================== 1. --- ATE enhancement: Display a connection cancel dialog while waiting for the connection to succeed. (Allows you to abort immediately, rather than having to wait until the TCP request times out.) 2. --- EVENTWAIT fix: There was a problem with using EVW_EXCDINOUT and EVW_EXCDFOCUS with TAB controls. Depending on the context, clicking on one of the tab panels might have failed to process the new panel, or may even have caused an EVENTWAIT error message. =========================================================================== A-Shell Development Notes Version 5.1.1128.0 (23 October 2008) =========================================================================== 1. --- Adjust handling of saved window settings. Previously it looked for %MIAME%\default.ash unless a settings file was specified via the -o switch on the command line. In that case, if the specified filespec started with "%USERPROFILE%\Application Data\ATE" directory, and the file was not present, it would have looked in %MIAME%, but the File>Save function would have saved it to the %USERPROFILE% directory. The new scheme: If no -o switch is specified, the search path is: %APPDATA%\<appname>\<cfgname>.ash %APPDATA%\<appname>\default.ash %MIAME%\<cfgname>.ash %MIAME%\default.ash where <appname> is "ATE" or "A-Shell" depending on the context. For ATE, <cfgname> is the name of the connection profile; for A-Shell it is the name of the ini file, or "default" if the ini file is miame.ini. If a -o file is specified, then it overrides the above rules, although if the file has no directory, the search path will be %APPDATA%\<appname> and then %MIAME%. (This matches the prior search path when -o was used without a fully qualified path, except that %APPDATA% works better (and resolves differently) under Vista. The File>Save and File>Save As menu items have been merged into a single File>Save... dialog, which now allows you to save the current settings to one of the four locations/names above, and in addition contains a Save As button for more exotic options. It also contains a Delete button as a convenience for deleting a saved settings file (although it does not allow deleting the %MIAME%\default.ash file). And, it shows the filespec of the settings file that the current settings were loaded from. The objectives of the above changes were: a) To better support Vista, which has a different location for which the %APPDATA% directory is not the same as %USERPROFILE%\Application Data directory; b) To make it easier for dealers, site managers, and individual users to manage their personal window settings without having to manually adjust their shortcut command lines. The new scheme is as security-lax as the old one (allowing anyone to overwrite the shared %MIAME%\default.ash), but the save function does always default to one of the %APPDATA% options (hopefully eliminating some of the accidental overwrites). The next step will probably be to allow the shared copy to be password protected. 2. --- ISAM 1.x bug fix: The prior fix in 1123.8 to accept non-standard IDX level values (<3 or >9) as indicative of old ISAM 1.0 (i.e. 3 level) was broken somewhere between 1123.8 and 1125.0. The fix has been reinstated. =========================================================================== A-Shell Development Notes Version 5.1.1127.2 (17 October 2008) =========================================================================== 1. --- Compiler bug fix: specifying an initial value on a MAP statement within ++PRAGMA EXTERN_BEGIN/EXTERN_END (or an ++EXTERN statement) was not generating any compiler error but was causing A-Shell to crash immediately on running the program. 2. --- AUI_CONTROL enhancement: internal icon resources can now be referenced via the #dddd syntax (where dddd is the decimal icon number). 3. --- XTREE column configuration refinement: column configuration now saved even when tree is exited with ESC (since this is a common exit not necessarily considered as "cancel"). The only way to exit without saving is now Control-C. 4. --- Command line refinement: selection of an internal icon using -g <name> can now be done by number, i.e. by replacing <name> with a numeric value 1001-1999. (These icon numbers are assigned as icons are added to the A-Shell executable and remain fixed thereafter.) This is mainly of use in ATE, where it may be more convenient than using the assigned names. (You can optionally use the #nnnn syntax, i.e. -g #1001 or -g 1001). You can also specify another DLL or EXE to load the icon from, using the -g iconame::module syntax, e.g. -g transform::ashico1 5. --- Vista-style icons: A first attempt at updating the ashico1.dll icon library to Vista has been made in the form of a new ashico1v.dll module. The new module has the same set of icon names, but most of them have been upgraded to "Vista style". The degree of backwards compatibility to XP and before has not yet been adequately tested. A new version of the icon display program, ICODLG[907,27] has been created under the name ICODLGV for testing. 6. --- AUI_CONTROL enhancement for static icons: A new CTYPE2 flag, MBF2_PIXSIZE has been defined which may be used specify display sizes of static icons: define MBF2_PIXSIZE = &h00000080 ! erow,ecol = size in pix Without this flag, the EROW and ECOL parameters passed when defining a static icon (MBF_STATIC+MBF_ICON) have no effect, as we let Windows choose the standard icon size based on your desktop preferences. (On a typical high-res monitor, this might be 32x32 pixels.) With the flag, the EROW and ECOL parameters are interpreted as the desired height and width in pixels. So you might set them to, say, 48, or 64, to display larger icons, similar to what Explorer does when it offers you multiple display sizes. Eventually the concept may be extended to other controls, but for now it only applies to static icons. The ICODLGV sample program in [908,27] has been enhanced to allow you to test this feature by using a switch /## where ## is the desired size, e.g. RUN ICODLGV/48. =========================================================================== A-Shell Development Notes Version 5.1.1127.1 (12 October 2008) =========================================================================== 1. --- SCRSTS.SBX 1.3(109) (Scrolling status window handler) enhancements: When the XTREE option is requested (see 5.1.1126.2 below for details), three additional optional parameters can be passed to the SCROP_INIT call xcall SCRSTS,SCROP_INIT,SROW,SCOL,EROW,ECOL{,PARENTID,SFLAGS, TITLE,CLOSECMD$,COLDEF$,XT'KBDSTR,XT'FLAGS,CTLID} XT'KBDSTR (S,10) sets the XTR'KBDSTR member of the XTRCTL structure, so that clicking on the status control sends the specified string. This can be useful if you want to allow the user to manipulate the status window, such as to sort, select, etc. (This probably only makes sense in conjunction with a COLDEF that defines relevant features such as columns, popup menus, etc.) The application would normally call the SCROP_SCROLL opcode to in response to receiving the XT'KBDSTR. XT'FLAGS may be used to specify additional XTREE flags, such as perhaps XTF_MSEL, XTF_SORT, etc. CTLID will return the XTREE control number (XTR'CTLNO), or in the case of INFLD, the AUI control id. This would only be of interest in sophisticated situations where you wanted to bypass SCRSTS.SBX and operate on the control directly using XTREE.SBR or INFLD.SBR. The SCROP_SCROLL operation now supports the return of an exitcode: xcall SCRSTS,SCROP_SCROLL,MSG$,EXITCODE Since the SCROP_SCROLL opcode actually puts the focus on the status control, the EXITCODE will be that which you would have gotten from XTREE, INFLD, or INMEMO, depending on the environment. This would probably be most useful if you defined a PopupMenu, which returned interesting exitcodes. The SOSLIB sample program REGPTR[908,29] has been updated to illustrate some of the new capabilities of SCRSTS. 2. --- MX_REGISTRY enhancements: 2 new operations defined for deleting keys and values: MX_DELKEY (8) and MX_DELVALUE (9): xcall MIAMEX, MX_REGISTRY, REGOP_DELKEY, HKEY, SUBKEY, RIGHTS, STATUS xcall MIAMEX, MX_REGISTRY, REGOP_DELVALUE, HKEY, NAME, STATUS RIGHTS [num, in] only applies when running in 64 bit Windows, in which case it can be used to select the registry view: RGKEY_WOW64_32KEY &h0200 Delete key from 32 bit registry view RGKEY_WOW64_64KEY &h0100 Delete key from 64 bit registry view HKEY [b4, in] must specify an open registry handle returned from a previous REGOP_OPEN operation (or may be one of the built-in hive handles, e.g., HKEY_CURRENT_USER, etc.) Note that to delete a key, the the RGKEY_DELETE (&h00010000) access right must have been specified in the REGOP_OPEN call. To delete a value, the RGKEY_SET_VALUE access right must have been specified in the open. SUBKEY [string, in] specifies the key to delete (within HKEY). All values within the key will be deleted, but if there are any nested subkeys, the operation will fail. (To delete a multi-level tree, you must start from the lowest level and work up.) NAME [string, in] specifies the name of a value to delete. STATUS [f6, out] returns 0 for success, else an error code. 3. --- Compiler refinement: When declaring extern variables within a function or procedure using ++pragma extern_begin (see 1125.2 below), overlay specifications no longer are treated as errors. This makes it much easier to use ++include to include a set of map statements to be declared as external. Note, however, that any such overlay specification is essentially ignored by the extern declaration; as with all extern declarations, you are merely identifying previously-defined variables, not actually defining anything new. ========================================================================== A-Shell Development Notes Version 5.1.1127.0 (10 October 2008) =========================================================================== 1. --- New MIAMEX, MX_SHORTCUT (173) routine creates a shortcut, on the desktop or in any other folder. XCALL MIAMEX, MX_SHORTCUT, TARGET$, LNKSPEC$ {, DESCR$, WORKDIR$, & ICON$, ICONIDX, STATUS} TARGET$ [s,in] should be set to the object or command line that the shortcut links to. Any %ENV% vars will be pre-resolved, i.e. at the time the link is created (rather than when it is clicked on). Examples: TARGET$ = """%MIAME%\bin\ashw32.exe"" -i ""%MIAMEFILE% abc""" TARGET$ = "http://www.microsabio.com" TARGET$ = """c:\company shared folders\readme.txt""" Note: as shown above in the first and third example, you must supply literal quotes as needed to enclose any path compoents of the TARGET$ command line that may contain embedded spaces. (In the first example, we don't know if %MIAME% or %MIAMEFILE% will contain embedded spaces, so we quote them to be safe.) LNKSPEC$ [s,in] should be set the full filespec of the shortcut itself. The default extension is ".lnk"; any other extension may fail to be recognized by the Explorer as a shortcut (or "Shell Link"). LNKSPEC$ does not require literal quoting even if contains embedded spaces. Example: LNKSPEC$ = "C:\vm\miame\test shortcut.lnk". Note that the filename (minus the .lnk extension and directory) will appear under the icon when in icon view, i.e. "test shortcut" in the above example. To put the icon on the user's desktop, you can use the %USERPROFILE% environment variable, e.g.: LNKSPEC$ = "%USERPROFILE%\Desktop\check this out.lnk" (For the common or "all users" desktop, use "%ALLUSERSPROFILE% instead of %USERPROFILE%, but beware that the operation may be blocked by a variety of security restrictions, and will require elevation under Vista.) DESCR$ [s,in] (optional) may specify a description to be embedded within the shortcut properties. WORKDIR$ [s,in] (optional) may specify the starting working directory for the process when the TARGET$ is launched. It does not require quoting. ICON$ [s,in] (optional) may specify a separate file from which the display icon should be taken. It does not require quoting. If not specified, then the first icon of the executable associated with the TARGET$ will be used. (If you want to user another icon from that executable, you must specify the module name again here.) ICONIDX [num, in] (optional) may specify the icon index (0,1,2,...) of the icon within the file (default is 0, the first icon). Ignored unless ICON$ is not blank. STATUS [f, out] is the return status. 0=ok. Positive numbers are Windows system error codes. (See MX_ERRNOMSG to display text). -1 indicates no GUI support available (requires Windows or ATE). 2. --- New TAB(-10,AG_SHORTCUT) (72) command version of MX_SHORTCUT: ? TAB(-10,AG_SHORTCUT);TARGET$; ","; LNKSPEC$; ","; DESCR$; ","; & WORKDIR$;","; ICON$;","; ICONIDX; chr(127); input "",STATUS Note, however, that there is no particular need to use this form of the command (except under non-A-Shell servers) since MIAMEX, MX_SHORTCUT will automatically issue it as needed for ATE support. Also note that this version does not support expansion of %ENV% variables (another reason to use the MIAMEX, MX_SHORTCUT instead). =========================================================================== A-Shell Development Notes Version 5.1.1126.3 (08 October 2008) =========================================================================== 1. --- AUI_CONTROL bug fix: close loophole leading to divide by zero when loading an image into a zero-width control). 2. --- SBX / Function / Procedure parameter passing fixes (both involving unusual type conversions, such as between X and numberic variables, or between F and S variables: a. XPUTARG N,FVAL was not doing anything if FVAL was a floating point variable and the caller had passed a string variable for parameter #N. Now it converts the floating point to a string. b. Pssing an X (unformatted) variable to a routine expecting a numeric parameter was attempting to do a value conversion (as if the source variable had been a string) rather than a raw binary transfer (as should be the case when the source or destination is unformatted). For example: MAP1 REC MAP2 BVAL,B,2 MAP2 JUNK,F,6 call AddOne(REC) print BVAL end Procedure AddOne(blocal as b2) blocal = blocal + 1 xputarg 1,blocal End Procedure In the above example, the caller is passing an unformatted variable (REC) to the AddOne() function, but the function is expecting to receive a B2 binary. Previously, blocal would have received the equivalent of val(REC), which was probably useless. Now blocal gets set from the the first 2 bytes of the passed REC, which is effectively the same as setting blocal = BVAL. =========================================================================== A-Shell Development Notes Version 5.1.1126.2 (08 October 2008) =========================================================================== 1. --- XTREE refinement: Eliminate most of the flicker when adding text to an existing tree using XTF_NOSEL. 2. --- SCRSTS.SBX 1.3(108) (Scrolling status window handler) now supports an option to use XTREE rather than INFLD to display the scrolling status window. To specfy XTREE, you must set the MBF_LISTBOX bit in the SFLAGS parameter when creating the scrolling status window. An optional new parameter allows you to specify an XTREE column definition string: xcall SCRSTS,SCROP_INIT,SROW,SCOL,EROW,ECOL{,PARENTID,SFLAGS, TITLE,CLOSECMD$,COLDEF$} The rest of the SCRSTS opcode formats are unchanged. Although the XTREE version actually has more overhead (XTREE is a vastly more complex control than the multi-line edit control used by INFLD), here are some of the reasons why you might prefer it: a. It eliminates the 1600 char limit on the amount of text that can be left in the window. With XTREE, there is essentially no limit. b. You can access many of the advanced XTREE features, such as colors, popup menus, columns, even multiple levels. Note, however, that it is up to you to supply a text string (in the SCROP_ADD or SCROP_TMADD calls) that is formatted to match the COLDEF specified with the SCROP_INIT. Also note that if any of the column header fields in COLDEF$ are not blank, then the normal column header bar will be displayed. Otherwise it will not (making it more like a typical scrolling status window). The TSTSCR.BP[907,20] sample program has been updated to allow easy experimentation with the new version. 3. --- MX_FINDFIRST refinement: embedded %ENV% variables are now supported. ========================================================================== A-Shell Development Notes Version 5.1.1126.1 (06 October 2008) ============================================================================ 1. --- Compiler bug fix: IF/ELSEIF/ENDIF (with no ELSE clause) was generating an error but not reporting what the error was. 2. --- INFLD bug fixes relating to forms (TYPE f) and GUI: - Last char of field would mysteriously reappear after deleting, replacing. - Replacing selected chars was not re-synchronizing the form. ========================================================================== A-Shell Development Notes Version 5.1.1126.0 (03 October 2008) ============================================================================ 1. --- XTREE enhancement: A new mechanism allowing individual users to save/restore their own adjustments to individual XTREE configurations. Currently these adjustments include column widths, column order, sort order, and active column. To activate this new feature, the application must make two changes to the code calling each XTREE: - Use the new advanced coldef directive TreeID= to give the tree a unique identity, so that any user-directed modifications can be associated with just that one tree. (See notes below.) - Update the XTRCTL map to define the new field XTR'USRCFG and assign it a value from the following, based on which user-configuration options should be allowed to override the application-supplied values: Symbol (XTREE.DEF) Value Description Other params over-ridden ------------------ ----- --------------- ------------------------- XTUCFG_COLWID 1 Column widths Dspwid (coldef) XTUCFG_SRTORD 2 Sort & active col xtr'columnactive, xtr'sortorder(),xtr'columnsort() XTUCFG_COLORD 4 Column order xtr'usecolorder,xtr'colorder() XTUCFG_ALL 255 All The new XTR'USRCFG field is defined at the bottom of the current XTRCTL map (see new XTREE.MAP, XTREE.DEF, and XTREE.SDF files in ASHINC:)... MAP1 XTRCTL ... MAP2 XTR'NFSELSTYLE,B,1 MAP2 XTR'SEARCHMODE,B,1 MAP2 XTR'USRCFG,B,1 ![127] new cfg save/restore flags MAP1 XTR'UNUSED2,X,16 ![127] was X,17 The TreeID may consist of an alphanumeric name, with an optional :# suffix where # is the version of the tree (an integer value). The idea of the version is so that if you modify the tree layout during an application update, XTREE will know not to apply previously saved configuration details to the new tree layout. The TreeID (maximum 32 chars) may also contain "%p" which will be replaced at runtime by the name of the current program. The feature is mainly useful for XTREEs that are implemented within SBX routines that might be called by multiple programs, where you want to allow the user to maintain a separate configuration in each case. So for example, you might use TreeID=SelCus-%p:1 Note, however, that currently ATE does not know the name of the current program running on the server, so it will replace "%p" with "ATE". If this is a concern, you can always use XCALL GETPRG within your SBX to retrieve the name of the main program and use it directly. User configuration adjustments are saved in the Registry automatically, provided that TreeID is defined. (If XTR'USRCFG is zero, the settings will be saved on exit, but not restored on entrance, which is one way to force the configuration back to application-specified settings.) Another way to deal with the possibility that the user accidentally makes a disastrous change to the configuration (like resizing a column to zero width, thus making it disappear entirely), is to define a PopupMenu and add to it the new special command $RESETCFG. For example: COLDEF=COLDEF+"0~0~x~H~PopupMenu=Misc,VK_xF666;Reset Columns,$RESETCFG~~" Selecting this option from the menu will cause the tree configuration to be immediately reset back to the way the application had originall intended. The configuration information is saved in the Registry as: HKCU\Software\MicroSabio\A-Shell\XTREE\treeid where treeid is the value specified in the TreeID= coldef clause, but with the version stripped. (The version is saved as a subfield rather than part of the key, to reduce the proliferation of Registry entries.) 2. --- Compiler / Language enhancement: New compile-time function SIZEOF(VAR) (requires /RC or /X:2) may be used to reference the size of a previously mapped variable. For example: MAP1 VAR2,S,SIZEOF(VAR1) or X = Y * SIZEOF(Z) ============================================================================ A-Shell Development Notes Version 5.1.1125.2 (27 September 2008) ============================================================================ 1. --- Compiler/language enhancement: individual global variables can now be declared as extern (i.e. available for reference) within a function or procedure. (Previously your only choice was all or nothing, via the ++PRAGMA AUTO_EXTERN.) There are two methods, one to declare a block of variables, and one to declare individual variables... To declare a block of variables as being visible within a function or procedure, use ++PRAGMA EXTERN_BEGIN and ++PRAGMA EXTERN_END: ++PRAGMA EXTERN_BEGIN <repeat any number of global map statements here> ++PRAGMA EXTERN_END The above approach is particularly useful when you want to ++INCLUDE a file containing a set of global map statements (perhaps a global control record). To declare an individual variable as being visible within a function or procedure, use ++EXTERN in place of MAP, followed by the normal syntax for a MAP statement. For example: ++EXTERN GUIFLAGS,B,4 There are few subleties and disclaimers to consider when using either of the above methods to declare specific global variables as being visible within a local procedure: - Declaring a variable with ++EXTERN or ++PRAGMA EXTERN_BEGIN does not have any effect on the original global variable definition, althoug it does allow the code within the procedure or function to modify the global variable at runtime. - The type and size may be omitted in the local extern declaration. Also, for arrays, the array dimensions may be omitted by just using (). However, if you do specify a type, size, or array dimensions, then they must match those in the original global definition of the variable. For example: !(main program) MAP1 GFLAGS(5),B,1 MAP1 SFLAG$,S,1 ... PROCEDURE TEST() ++EXTERN GFLAGS(5),B,1 ! valid ++EXTERN GFLAGS(5),F ! invalid (types don't match) ++EXTERN GFLAGS(5),B,2 ! invalid (sizes don't match) ++EXTERN GFLAGS(4),B,1 ! invalid (subscripts don't match) ++EXTERN GFLAGS() ! valid (equivalent to GFLAGS(5),B,1) ++EXTERN SFLAG$ ! valid (equivalent to SFLAG$,S,1) - The MAP level does not need to match (it doesn't even get specified for the ++EXTERN statements). But to the extent that there is any discrepancy between the local and global definitions, it is the global one that actually matters. The local one simply allows the local routine to access the global variable. 2. --- Compiler enhancement: When the /LF switch is used (to create an LSX list file), unreferenced variables are now listed at the end, as a convenience for those interested in clearing dead weight out of program. Note, however, that these are not errors, and in many cases, it isn't even desirable to remove them. For example, it is common to group misc variables under a heading, e.g. MAP1 WORK'VARS MAP2 X,F etc. Typically in the above case, there would probably be no explicit reference to WORK'VARS, but you couldn't just delete it without elevating the MAP2 vars beneath it to MAP1. So the new feature is only to be used a guide (or ignored) as you see fit. 3. --- Compiler/language enhancement: One or more ELSEIF clauses may now be inserted into an extended IF/ELSEIF/ELSE/ENDIF statement (in /RC or /X:2 modes), e.g.: IF <expr1> THEN <statements> ELSEIF <expr2> THEN <statements> ELSEIF <expr3> THEN <statements> ELSE <statements> ENDIF Previously, to accomplish the same thing you would have had to use nested IF/ELSE/ENDIF clauses, e.g.: IF <expr1> THEN <statements> ELSE IF <expr2> THEN <statements> ELSE IF <expr3> then <statements> ELSE <statements> ENDIF ENDIF ENDIF The ELSEIF version is mainly just cleaner and easier to follow. 4. --- Compiler bug fix: SWITCH statements now work in /RC mode, per the docs. 5. --- COMPIL.LIT 1.1(122) enhancement: you may now use the /C:symbol syntax to define a symbol without giving it an explicit value with the =value clause. If no value is specified, the implicit value is a numeric 0. This is most useful for defining symbols to be used in ++IFDEF or ++IFNDEF tests, where the issue is whether the symbol is defined at all, not what its value is. ============================================================================ A-Shell Development Notes Version 5.1.1125.1 (26 September 2008) ============================================================================ 1. --- AUI_CONTROL bug fix: child dialogs were being positioned relative to the parent dialog (rather than the main window) even when MBF_ALTPOS or MBF_DLGNOCREEP was set. (Problem introduced early in 5.1) 2. --- PAGE.LIT 1.0(102) adds support for syntax display (PAGE /?), and also checks and adjusts for common mistake of using PAGE <file> to display a file, instead of PAGE TYPE <file>. In other words, if the argument list consists of a single filespec, and that filespec appears to be a text file, it is treated as if the command was PAGE TYPE <file>. ============================================================================ A-Shell Development Notes Version 5.1.1125.0 (24 September 2008) ============================================================================ 1. --- Compiler enhancement: implement conditional compilation statements: ++IFDEF <symbol> ++IFNDEF <symbol> ++IF <constant expr> ++ELSE ++ELIF <constant expr> ++ENDIF The above statements (described individually below) are supported by compiler modes /RC and /X:1 or higher. ++IFDEF <symbol> compiles the following statements if the specified symbol is defined using a DEFINE statement, or is a structure defined with DEFSTRUCT, or is defined on the compiler command line with a /C:symbol=value clause (see below). ++IFNDEF <symbol> is just the logical reverse of ++IFDEF <symbol> ++IF <constant expression> evaluates the specified expression and compiles the following statements if the expression is equivalent to TRUE. Constant expressions are a subset of regular Basic expressions, made up only of defined symbols (constants) and literals (i.e. no variables), and a limited set of pre-defined functions and operators: All arithmetic operators (+,-,/,*,**,^,MOD) All logical operators (AND, OR, NOT) Comparison operators (<, >, <=, >=, ==, <>, #) All bitwise operators (AND, OR, NOT, NOR, XOR) Arithmetic functions: int(),fix(),abs(),min,max Scientific functions: exp(),sgn(),sqr(),sin(),cos(),tan(),atn(),fact() String functions: +,left(),mid(),right(),[a,b],len(),instr(),asc(),chr(), str(),val(),rtrim(),edit(),strip(),pad(0 File functions: lookup() Examples ++IF APPVER > 3 ++IF CUSTOM$ = "MR. BIG" ++IF (APPVER > 3) AND (LOOKUP("xyz.bsi") # 0) ++ELIF <constant expression> is similar to ++IF <constant expression> except that it is used in an IF..ELIF..ELIF..ELSE..ENDIF construction. ++ELSE compiles the subsequent code only if none of the prior ++IF and ++ELIF clauses were true. ++ENDIF marks the end of the conditional construct. Examples: ++IFDEF GUI PROGRAM MYPROG,1.0G(100) <source code implementing GUI verison here> ++ELSE PROGRAM MYPROG,1.0(100) <source code implementing text version here> ++ENDIF The above illustrates one way to use conditional compilation to conditionally create either a GUI or text version of your RUN file, starting from the same source file. Previously you could only do the same thing with runtime conditions (which may still be a better option in most cases), but in some cases, you may prefer to have two separate versions of the RUN (perhaps to keep the size down, or to simplify runtime debugging.) Note that the symbol GUI would have had to have been defined somewhere prior to the compiler seeing these statements (see below for how to define symbols on the command line). Also note that we used two different versions of the PROGRAM statement in the above example, so that you can easily tell which RUN version you have by displaying it with DIR/V. Another example: ++IF APPVER = 1 ++MESSAGE Compiling Version 1 ++INCLUDE ver1.bsi ++ELIF APPVER = 2 ++MESSAGE Compiling Version 2 ++INCLUDE ver2.bsi ++ELSE ++ERROR No APPVER defined! ++ENDIF The above illustrates the IF/ELIF/ELSE/ENDIF construct, used to select which ++include file to use based on the defined APPVER. See below for an explanation of the ++MESSAGE and ++ERROR statements. One more example: ++IFDEF SBX ++PRAGMA SBX <retrieve parameters, SBX setup, etc.> ++ENDIF The above illustrates a simple way to allow a single source file to be compiled as either an SBX or a RUN file. (The SBX symbol would need to be defined on the compiler command line, e.g. COMPIL MYPROG/X:2/C:SBX=1) 2. --- Compiler enhancement: ++ERROR and ++MESSAGE statements: ++ERROR <message> The above statement causes the message to be displayed and is treated as a compiler error. This is particularly useful in conjunction with conditional compilation, as shown in the preceding example. ++MESSAGE <message> The above statement is equivalent to ++ERROR <message> except that no error is generated. It is useful primarily for giving you visual feedback during compilation that your conditions are working as expected. See prior example. 3. --- COMPIL.LIT 1.0(121) enhancement: New command line switch supports passing symbol definitions into the compiler: Syntax: /C:symbol=value Example: COMPIL MYPROG/RC/C:APPVER=2/C:GUI="VISTA" The above example specifies the /RC switch, plus two instances of /C to define two symbols, APPVER=2 and GUI="VISTA". These definitions are treated exactly as if the following had been inserted at the top of the MYPROG source code: define APPVER=2 define GUI="VISTA" Note the need for quotes when defining a string symbol (per the normal rules of the DEFINE statement). 4. --- compil.exe 409 supports the same capabilities as described above, except using the -c:symbol=value syntax (in place of /C:symbol=value). 5. --- XTREE bug fixes: Radiobuttons and checkboxes where not properly centered within their columns, but instead were about 2 pixels to the left. And the character search was not taking into account the current item. (Fixes contained in new SftTree_IX86_A_60.dll version 6.04). 6. --- XTREE bug fix: Use of XTR'EXPANDLEVEL was causing item focus to be moved from the first selected item to its parent. 7. --- ATE aux printing bug fix: printer specified in Connection Properties dialog was sometimes being ignored, using the default instfad. ============================================================================ A-Shell Development Notes Version 5.1.1124.8 (16 September 2008) ============================================================================ 1. --- Compiler enhancement: initial values and overlays are now supported within DEFSTRUCT / ENDSTRUCT. ============================================================================ A-Shell Development Notes Version 5.1.1124.7 (15 September 2008) ============================================================================ 1. --- XTREE bug fix: XTR'COLUMNSORT() was not getting updated properly (problem exacerbated in 1122.1). ============================================================================ A-Shell Development Notes Version 5.1.1124.6 (14 September 2008) ============================================================================ 1. --- XTREE bug fix: tab across editable cells on bottom line was in some cases jumping to the row above. (Problem was introduced in 1123.3) ============================================================================ A-Shell Development Notes Version 5.1.1124.5 (12 September 2008) ============================================================================ 1. --- Clean up various minor problems related to the PREVIEW=ON and APEX=ON commands introduced in 1124.3 below. 2. --- Aux printing enhancement: When attempting to print to the PROMPT: device in a non-local Windows, the DEVICE is automatically changed to DEVICE=AUXLOC:PROMPT: to forward to the PC client. (This should eliminate a number of tech support issues that relate to attempting to print to the PROMPT: device on an ATSD server.) It may also eliminate at least one cause of a file being left in-use after a failed attempt at printing. ============================================================================ A-Shell Development Notes Version 5.1.1124.4 (11 September 2008) ============================================================================ 1. --- PDFX Email.Type 4 refinements: - Adjust format of log file to following: 11-Sep-08 10:54:01 ID: XAB989, Subj: Test new Email Type 4 [OK] To: Jack McGregor <jack@microsabio.com>, Joaquin <joaquin@microsabio.com> CC: juan@microsabio.com BCC: microsabio@gmail.com SID: JACKT42:02, joaquin, PRINT The status is always contained in brackets at the end of the top line, and will be either "[OK]" or "[!Err: ##]". The top line also contains the ID (if defined via Email.ID) and the Subject line, simplifying efforts to verify that a particular message was successfully sent. The machine identification, user name, and program name have been moved to the bottom line with the tag "SID:" (Session ID). - Add/improve GDIPRT tracing. 2. --- TAB(-10,AG_EVTMSG) / trace.print fix: tokenization was causing the message to be truncated at the first comma in some cases. 3. --- DIR.LIT 3.0(147) fixes a problem in which the /D switch was ignoring the /MIN:# and /MAX:# and /MINDAYS:# switches. Also adds support for /MAXDAYS:# (to display files recently modified). 4. --- HOSTEX.SBR enhancement (UNIX): An optional 3rd parameter may be specified to receive the stdout of the specified command. For example: MAP1 STDOUT$,S,2048 MAP1 STS,F XCALL HOSTEX,"uname -a",STS,STDOUT$ This would capture the output of the "uname -a" command into the variable STDOUT$. Previously, to accomplish the same thing, you would have had to pipe the output of the command to a file, then open the file to input the result, then delete the file. This method is much easier and more efficient. It also works with multi-line output, e.g.: XCALL HOSTEX,"ls -l",STS,STDOUT$ In this case, the individual lines of output will be delimited within the variable (STDOUT$) using the standard UNIX line delimiter (ASCII 10). Note that this technique is really only reliable with "regular commands", especially shell commands. If you execute an arbitrary executable, there is no telling whether it will generate stdout in a fashion compatible with this scheme. Currently this does not work under Windows. ============================================================================ A-Shell Development Notes Version 5.1.1124.3 (10 September 2008) ============================================================================ 1. --- PDFX Email.Type 4 enhancement: //PDFX,Email.Type,4 will now override subsequent Email.Type commands, so you can effectively convert existing program-generated files to use Email.Type,4 without modifying the programs, by creating a prefix file, say, ASHCFG:PDFX.PFX which contains: //PDFX,Email.Type,4 and then adding PREFIX=ASHCFG:PDFX.PFX to any printer init files that use DEVICE=PDFX... 2. --- New printer init commands: PREVIEW = ON APEX = ON PREVIEW=ON forces the SSW_PREVIEW flag (524288 or &h80000) to be set in the switches, provided that the SSW_NOPREVIEW flag (1048576 or &h100000) has not already been set. This is equivalent to passing the /PREVIEW switch to PRINT.LIT, or setting the SSW_PREVIEW bit in the switches parameter to XCALL SPOOL. APEX=ON is nearly the same as PREVIEW=ON, but is specifically for the ATE case where you want the PREVIEW option to be ignored on the server and only recognized on the client. Otherwise, activating PREVIEW on the server in a non-GUI environment might give you the text-mode preview, EZTYP. 3. --- PDFX Email.Type,4 fix: It was not supporting ";" (semicolon) as a valid delimeter when multiple email addresses were included in one Email.To, Email.CC, or Email.BCC statement. Now both comma and semicolon are allowed. ============================================================================ A-Shell Development Notes Version 5.1.1124.2 (09 September 2008) ============================================================================ 1. --- PDFX Email.Type 4 bug fix: In some cases, the email was being sent before the PDF writer had finished writing the file, causing it to abort with the error "Cannot attach PDF file - does not exist". It now waits up to 10 seconds for the PDF file to finish being written before giving up. 2. PDFX Email.Type 4 enhancements: 3 new commands have been implemented for use with Email.Type 4: //PDFX,Email.ID,idstring This just attaches an arbitrary idstring (up to 32 chars) to the message. Currently the only purpose of this is to identify the message in the log (described below). Conceptually, applications that send a lot of messages may want to assign unique identifiers to them for tracking/followup purposes. //PDFX,Email.Header,hdr,hdrvalue e.g. //PDFX,Email.Header,Disposition-Notification-To,jack@microsabio.com This statement allows you to add an arbitrary header to the message. The example given is a particularly useful one, requesting a return receipt from the recipient when she reads the message. Definitions of standard headers can be found on the Internet, but keep in mind that it is up to the particular SMTP server and/or email client to properly interpret them. Also note that contrary the standard //PDFX,Email.xxx,value command, this one effectively takes two arguments - the header name and its value. You can, however, enclose the last two arguments in quotes if you prefer to maintain the single argument syntax. //PDFX,Email.LogFile,logfile A-Shell will now maintain a log file of Type 4 messages sent. The default log file is OPR:SMTP.LOG. You can change that with the above statement. To deactivate the log entirely, set logfile to "". ============================================================================ A-Shell Development Notes Version 5.1.1124.1 (07 September 2008) ============================================================================ 1. --- New MX_PWCRYPT (172) function for simple password encryption (useful in GDI files to avoid revealing SMTP password): xcall MIAMEX, MX_PWCRYPT, CLEARPW$, CRYPTPW$ You specify CLEARPW$, the clear text version of password, and it returns CRYPTPW$, the encrypted version. Note that this is a relatively simplistic password encryption mechanism known to A-Shell and ATE, which is recognized by the fact that the first character will be a chr(2). If you have a need to decrypt then, contact MicroSabio for details. (We didn't publish the decryption scheme because it would compromise what limited security it offers). 2. --- MX_REGISTRY bug fix: The REGOP_SET (3) opcode was always returning the same status value as you passed it. ============================================================================ A-Shell Development Notes Version 5.1.1124.0 (04 September 2008) ============================================================================ 1. --- XTEXT refinement: in string buffer mode, if the source and destination parameters are the same, it no longer pre-clears the destination. (This was causing confusion since it effectively cleared the source before the source got loaded into the control.) 2. --- Preliminary beta release of new //PDFX,Email.Type,4 This is an improved alternate implementation of the direct-to-SMTP mode (Email.Type,3) which didn't work that well in the version built-in to PDFX. A significant enhancement in the new version is that it will display details about failures to connect with the SMTP server. (Previously there was no log and no good way to debug such failures.) Other enhancements: - You may now include multiple Email.To and Email.CC directives. (As before, each one may contain multiple addresses, but that still limited you to the number that would fit on one line, or about 1024 characters.) - Email.BCC is now available. Note that you need AshNet.DLL (as well as PDFX) to support this. ============================================================================ A-Shell Development Notes Version 5.1.1123.8 (01 September 2008) ============================================================================ 1. --- ISAM 1.0/1.1 bug fix: New logic for detecting whether an ISAM file is in the old 1.0 or new 1.1 format was failing to recognize a variation of the older format that appeared to have 255 levels. (Was aborting with an invalid # of levels error.) ============================================================================ A-Shell Development Notes Version 5.1.1123.7 (26 August 2008) ============================================================================ 1. --- Compiler bug fix (introduced in 5.1.1123.5, compil edit 405) - string functions without an explicit default function type were being reported as errors. 2. --- Improvements to DEFSTRUCT: - Upper and lower case (or mixed case) formal structure names now allowed. - STATIC and PRIVATE instances of structures now allowed. Note: DIMX does not support structures. ============================================================================ A-Shell Development Notes Version 5.1.1123.6 (25 August 2008) ============================================================================ 1. --- XTREE bug fix: The patch in 1123.2 created an undesirable side effect of making it difficult to select the last item in some lists. ============================================================================ A-Shell Development Notes Version 5.1.1123.5 (24 August 2008) ============================================================================ 1. --- Language enhancement: defined structures. It is now possible to assign a type name to a set of MAP statements and then use that as if it was a data type. This comes in very handy when you need to have multiple copies of a particular data structure. To define a structure, use the new DEFSTRUCT and ENDSTRUCT keywords, to enclose a set of MAP statements (levels 2 thru 9). For example: DEFSTRUCT PHONENUMBER MAP2 DESCR,S,20 ! e.g. Front Office, Accounts Payable, etc. MAP2 TYPE,S,6 ! e.g. cell, bus, home, pager MAP2 XNUM MAP3 COUNTRYCODE,S,3 MAP3 AREA,S,3 MAP3 NUMBER,S,10 ENDSTRUCT DEFSTRUCT CUSREC MAP2 ID,S,6 MAP2 NAME,S,30 MAP2 PHNUM(5),PHONENUMBER ! array of PHONENUMBER structures MAP2 BALANCE,F ENDSTRUCT MAP1 SALE,CUSREC ! SALE is an instance of structure CUSREC MAP1 PROSPECT(10),CUSREC ! PROSPECT() is an array of struct CUSREC MAP1 PH$,PHONENUMBER ! PH$ is an instance of struct PHONENUMBER ... PH$ = FN'GETPHONENUM$(SALE,"cell") ! retrieve cell # from customer SALE DEFINE FN'GETPHONENUM$(cus as CUSREC, type$ as S6) as PHONENUMBER map1 locals map2 i,F ! locate phone number by matching type for i = 1 to 5 if cus.PHNUM.TYPE(i) = type$ then FN'GETPHONENUM$ = cus.PHNUM(i) endif next i ENDIF The above example illustrates defining two structures, PHONENUMBER and CUSREC. The CUSREC structure even contains an array of the PHONENUMBER structures in the PHNUM(5) field. Then it defines an instance of the CUSREC structure called SALE, an array of instances called PROSPECT(), and an instance of the PHONENUMBER structure called PH$. The following shows the equivalent (fully expanded) form of MAP1 SALE,CUSREC : MAP1 SALE MAP2 SALE.ID,S,6 MAP2 SALE.NAME,S,30 MAP2 SALE.PHNUM(5) MAP3 SALE.PHNUM.DESCR,S,20 MAP3 SALE.PHNUM.TYPE,S,6 MAP3 SALE.PHNUM.XNUM MAP4 SALE.PHNUM.COUNTRYCODE,S,3 MAP4 SALE.PHNUM.AREA,S,3 MAP4 SALE.PHNUM.NUMBER,S,10 Note the use of the period to separate the names of structure instances from the fields in the structure. Jo, for example, you might read the structure from a disk file and then print out the ID field as follows: READ #CH, SALE PRINT "Customer ID = ";SALE.ID Defined structure names may be used similarly to the unformatted type X, and passed to functions and procedures. In the example above, the function FN'GETPHONENUM$() takes a CUSREC structure as an argument, and returns a PHONENUMBER structure. (Note that because function names must contain a $ suffix if the function returns an S or X value, and since stuctures are essentially a special variation of the X type, any function returning a structure must have a $ on the end of the name.) The formal parameter "cus as CUSREC" essentially creates a set of local map statements which are identical to the ones shown above for SALE, except with "SALE." replaced by "cus." Otherwise, in terms of parameter passing, the "cus as CUSREC" parameter is equivalent to "cus as X246". (Previously, this is how you had to pass the structure, and then you had to repeat the MAP2-MAP9 levesl of the structure map statements within the Function. So the new method doesn't exactly add any new capability, but it makes using structures and especially passing them between routines much cleaner and easier. One way to help clarify the effect of structure definitions is to compile with the /L switch, in which case the expanded forms of the structures will display in the LSX file. ============================================================================ A-Shell Development Notes Version 5.1.1123.4 (24 August 2008) ============================================================================ 1. --- Bug fix: XCALL AMOS was interfering with OPTIONS=SBX_RUNDIR. After using XCALL AMOS,"RUN XXX", the next SBX search was looking in the directory where the XXX program was loaded from, rather than the directory where the original program was loaded from. 2. --- Eventwait bug fix: When multiple dialogs contained controls with the same exitcodes associated with them, AUI_EVENTWAIT with the EVW_EXCDFOCUS and/or EVW_EXCDINOUT flags was not always selecting the control from the current dialog. (The symptom was that the focus was not going to the intended control.) ============================================================================ A-Shell Development Notes Version 5.1.1123.3 (23 August 2008) ============================================================================ 1. --- XTREE enhancement: New advanced coldef parameters: RGBbgTotals=r,g,b RGBfgTotals=r,g,b RGBbgHeaders=r,g,b RGBfgHeaders=r,g,b These establish the base colors for the special data lines at the top and bottom of the tree which have been flagged as headers or totals. Note: totals line(s) are defined via the XTF_TOTALS flag and/or TotalLines=# coldef parameter; headers lines are defined by the HdrLines=# coldef parameter. Also note: "header" lines defined via HdrLines=# should not be confused with the real column headers, which are not data lines at all and which do not have adjustable colors. The header lines we're talking about here are just data lines that have been designated "headers" so that they remain at the top, regardless of sorting. ============================================================================ A-Shell Development Notes Version 5.1.1123.2 (22 August 2008) ============================================================================ 1. --- XTREE bug fix: When the current editable cell was scrolled off the bottom with the vertical scroll bar, XTR'TARGETROW was being set one or two rows too far down, making it difficult to scroll all the way to the top (until the editable cell was moved by some other means up a few rows.) 2. --- XTREE refinements: Reduce some instances of "dancing icons", blinking title bars, and other kinds of unwanted display flashing when exiting and reentering a tree during cell editing. ============================================================================ A-Shell Development Notes Version 5.1.1123.1 (21 August 2008) ============================================================================ 1. --- GDI Printing refinement: - The //SETFONT width parameter now works more reliably with fixed pitch fonts. ============================================================================ A-Shell Development Notes Version 5.1.1123.0 (20 August 2008) ============================================================================ 1. --- INPUT RAW, INPUT LINE fix: disable the automatic removal of field-surrounding quotes from INPUT RAW and INPUT LINE (introduced in 1122.9). ============================================================================ A-Shell Development Notes Version 5.1.1122.9 (19 August 2008) ============================================================================ 1. --- INPUT CSV bug fix: The 1122.8 fix for fields like ["O" Ring] which start with a quote that is matched mid-field was causing the next field on the line to be ignored. 2. --- INPUT CSV enhancement: Fields enclosed in quotes are now automatically de-quoted now, even when AF_CSVNOQUOTE is set. (AF_CSVNOQUOTE is still useful for eliminating all other quote-matching logic in files that have non-standard quoting.) 3. --- INPUT CSV enhancement: AF_CSVSMARTQUOTE no longer does anything. Its logic is now automatic. Previously, it only served to prevent the improper concatenation of additional input lines in order to try to match up quotes that occur in the middle of a field (i.e. don't require matches). There doesn't seem to be any value in not doing that all the time. 4. --- INPUT bug fix: 1122.8 broke INPUT (without CSV) when dealing with quoted fields. ============================================================================ A-Shell Development Notes Version 5.1.1122.8 (18 August 2008) ============================================================================ 1. --- ISAM bug fix: Close loophole in new ISAM 1.1 logic for indexes with > 3 levels in which a delete that causes updates of more than 2 levels of IDX was leaving a block of keys stranded (invisible to ISAM 1 but not 2). 2. --- INPUT CSV bug fix: When AF_CSVSMARTQUOTE flag set, don't choke on fields with formats like: "O" Ring. (Previously it thought that a leading quote must indicate that the field was quoted, while treating the mid-field quote as a regular data character, thus thinking the line was unquoted. 3. --- (UNIX) VT220Q driver fixes to make PgUp/PgDn/Ins/Del/BS in the VA emulator act more like AM75G. 4. --- (Linux) EFS update: build 117. ============================================================================ A-Shell Development Notes Version 5.1.1122.7 (16 August 2008) ============================================================================ 1. --- Windows printing bug fix: printer names were being treated as case sensitive, causing spurious printer-not-defined errors. 2. --- Windows printing bug fix: printers specified via a \\machine\sharename that were not explicitly defined locally were generating invalid printer errors. 3. --- ISAM enhancement: The old "classic" implementation, and the new extended implementation (which supports variable IDX levels and block sizes) now coexist in the same copy of ASHW32.EXE. If the IDX uses > 3 levels or > 512 byte IDX blocks, then the new implementation is used; otherwise the old implementation is used. This should reduce or eliminate most concerns about the possibility of the new implementation introducing new bugs into stable ISAM-based applications where the new performance features are not enough to make up for any new risks. Note that you can verify which implementation is being used for any file by using SET TRACE FOPENS ON and SET TRACE ISAM ON. The new implementation says "ISAMX" in the trace messages where the old one said "ISAM" or nothing. ============================================================================ A-Shell Development Notes Version 5.1.1122.6 (15 August 2008) ============================================================================ 1. --- XTREE refinement: Restore operation of ALT+down arrow in combo boxes (broken in the previous patch). 2. --- EFS bug fix: A serious but obscure problem in random-position stream updating was finally resolved. As far as we can tell, the problem only surfaced in the compiler when creating EFS to create encrypted RUN modules directly from COMPIL.LIT, with programs using Functions and Procedures. The result was typically a RUN module which would immediately crash with one or more inexplicable errors (out of memory, stack overflow, seg fault, illegal syntax code, etc.) ============================================================================ A-Shell Development Notes Version 5.1.1122.5 (14 August 2008) ============================================================================ 1. --- XTREE refinement: ALT+key accelerator keys now work within editable cells. Previously, an attempt to use them would either cause the editable cell to exit, or (in checkbox/radiobutton cells) to be ignored. ============================================================================ A-Shell Development Notes Version 5.1.1122.4 (11 August 2008) ============================================================================ 1. --- Filespec handling refinement: The central AMOS-to-host filespec converter now handles un-quoting of files. Previously it was up to individual XCALLs, AG_xxx functions, etc., to do this, resulting in cases where a quoted filespec would pass through and then fail to be recognized. 2. --- EZSPL bug fix: In some cases, if the file being printed was not found, the error message would report one of EZSPL's configuration files as the missing file. 3. --- MX_GETFLAGS / AG_GETFLAGS / ATE refinement: Opcode 0 (retrieve flags) was querying the ATE client even when it was already running locally on the ATE client. Generally this was a harmless inefficiency, but could have caused problems in nested ATE subroutines invoked via AG_XFUNC. 4. --- AG_XFUNC refinement: Arguments are now automatically un-quoted, allowing arguments to be passed that contain commas (like full AMOS filespecs). 5. --- SERCH.SBR refinement: TRACE=RW now traces SERCH read operations. 6. --- SERCH.SBR bug fix: SERCH was failing to find keys when operating on a file that was opened directly in memory (i.e. by LOADing the file and then using AUTO_MEMOPEN or the MEM: device to open it.) The problem did not affect memory-mapping, which is generally a better way to go anyway. 7. --- Job status refinement: memory-mapped READs and WRITEs now counted in the reads/writes totals shown by JSTAT and SYSTAT/W. (This is a good way to measure the improvement realized by memory-mapping, by comparing the average reads and writes per second with and without memory-mapping.) 8. --- SORTIT.SBR enhancement: F8 and F4 keys now supported. ============================================================================ A-Shell Development Notes Version 5.1.1122.3 (07 August 2008) ============================================================================ 1. --- XTREE bug fix: combos using list substitution were sometimes matching incorrectly due to using too few characters in selecting the matchint item. ============================================================================ A-Shell Development Notes Version 5.1.1122.2 (06 August 2008) ============================================================================ 1. --- Windows/ATE printing refinement: Attempts to print to the AUXLOC: device in the local/client environment now reports an invalid device and treats it like PROMPT: Previously it was handled like a valid but null printer, thus leading to considerable confusion, particularly in the ATE environment, when the ATE printer was accidentally set to AUXLOC: ============================================================================ A-Shell Development Notes Version 5.1.1122.1 (05 August 2008) ============================================================================ 1. --- XTREE fix: There were problems relating to use of HdrClickExit for application-controlled sorting (inability to click header successively to reverse sort, failure to display the up/down arrow in the header based on xtr'columnsort). 2. --- ATSYNC fix: One of the error messages relating to an ATSYNC failure had a GPF loophole. ============================================================================ A-Shell Development Notes Version 5.1.1122.0 (04 August 2008) ============================================================================ 1. --- Old ISAM Performance Enhancements: For large ISAM files, you can now achieve much better performance by increasing the IDX block size and/or number of index levels (from the previous fixed values of 512 and 3). New versions of the ISMBLD and ISMDMP utilities allow access to the new capability. Note that existing files remain completely compatible and will perform exactly as before. This is also true of new files that continue to use the old default values of 512 for the block size and 3 levels. To take advantage of the new capabilities, you must dump the file and build a new one with the new ISMBLD switches /B:# and /L:# (see below). 2. ISMBLD.LIT 2.1(128) adds support for the new features via new switches: /B:#### (512,1024,2048,4096,8192,16384) IDX block size /L:# (3-9) IDX levels /MI Memory map IDX (during load) /MR Memory map just root of IDX during load (less mem needed) /F "Fast" load (assumes no dup keys; aborts if so) /? Display switches Note that switches were used for most of the new options, rather than prompts, to avoid breaking compatibility with existing CMD files that execute ISMBLD. COMMENTS: IDX BLOCKS (/B:####) - Increasing the IDX block size helps by increasing the number of keys that can be scanned per disk operation, reducing the number of levels needed, and reducing the number of block splits during adding, all at the cost of more bytes being transferred to/from the disk per node accessed. For most modern disks and computers, the tradeoff works well, at least up to 2048. Our recommendation is to choose a block size 20-50 times larger than the key size. IDX LEVELS (/L:#) - Increasing the IDX levels helps balance the tree, avoiding the top-heavy situation where we have to sequentially scan many blocks at the top (root) of the tree in order to find the right branch. The optimum number of levels is that which results in only one block at the root of the tree, and is related to the number and size of keys, and inversely related to the size of the IDX blocks. ISMBLD (and ISMDMP) will work out the math for you and display a list of the projected IDX blocks at each level, e.g.: .ISMBLD TSTNEW Key size: 50 Key position: 1 Size of data record: 64 Number of records to allocate: 500000 62415 index blocks will be allocated Empty index blocks to allocate: 62415 Projected IDX blocks by level: 4000,20000,100000 Warning: IDX is top heavy; consider adding levels or increasing block size. The above example shows building a file with 500000 records each with a 50 byte key. Using the default values (512 byte IDX block and 3 levels) the estimated number of blocks at the top level is 4000 which is extremely top-heavy. (The top level must be scanned sequentially until we find our branch, sort of like turning the pages of the dictionary one by one to find the right page.) So in this case, each key lookup will take an average of 4000/2 or 2000 disk operations just for the top level, then typically one each for the remaining levels. (The numbers work out nicely in this example because assuming an average loading efficient of 60%, that gives us 5 keys per 512 byte index block, hence the ratio of 5X between each level of the IDX.) Since 2000+ disk operations per key lookup is going to result in TERRIBLE performance, let's hit Control-C here (before the IDX is built) and try to optimize it. To optimize this IDX, we can either increase the block size, the number of levels, or ideally both. Using our heuristic for the ideal block size of 20-50 times the key size, we could either go with 1024 or 2048; let's try 1024 and 6 levels: .ISMBLD TSTNEW/B:1024/L:6 Key size: 50 Key position: 1 Size of data record: 64 Number of records to allocate: 500000 29415 index blocks will be allocated Empty index blocks to allocate: 29415 Projected IDX blocks by level: 1,5,50,500,5000,50000 As you can see, now we have a projected IDX tree with only 1 block at the top or root, 5 below that, and then a 10X factor between each of the rest. This is vastly better than the original default configuration, reducing the average number of disk operations per key lookup from over 2000 to about 7. If you have the time to experiment, you might want to try a block size of 2048 (/B:2048) and 5 levels, which produces an IDX level breakdown something like: 1,3,47,1034,22728. It is hard to predict whether the decrease of one level combined with the increase in block size will be a net gain or loss (it will probably depend on your hardware, but probably won't make a major difference.) Projected vs. Actual IDX structure: The projected number of IDX blocks by level resulting from a particular combination of records, key size, block size and levels is just an estimate based on an average distribution of keys and the number of records specified. In a production environment, you might build the file with a small initial number of records and then rely on the auto-expand feature to increase the file size as needed. Unfortunately, unlike the case with ISAM-A, the auto-expand does not adjust the IDX structure, it only adds blocks to it. Thus what might be an ideal configuration for an initial file size of, say, 10,000 records, might turn out to be badly top-heavy if the file grows to 500,000 records. Thus, you may want to experiment using ISMBLD to specify the number of expected records (i.e. the file size you'd like to optimize the IDX for), in order to figure out the best number of levels. (Just ^C before creating the actual file.) Then you can use the appropriate /B:### and /L:# values, and don't worry if the initial index appears to have more than the optimum number of levels (e.g. 1,1,3,30,3000). Keep in mind that the performance penalty for too many index levels is just one disk operation per level, while the penalty for too few levels is essentially unlimited. MEMORY MAPPING (/MI and /MR) - Under UNIX, memory mapping the IDX, either fully (/MI) or just the first few blocks at the top of the tree (/MR), affects only the ISMBLD loading operation. In general memory mapping results in a very significant performance increase, when the total file size is small compared to the available system memory (else it may adversely affect the cache efficiency). /MR only maps a handful of blocks, so there is no danger of it affecting cache efficiency, but on the other hand, the overall benefit is smaller. If you want to get this same effect in your application, you'll need to use XCALL ASFLAG. Memory mapping does not have much benefit, if any, under Windows. FAST LOAD (/F) - Like /MI and /MR, this also only affects the load operation. It speeds the process somewhat, by eliminating the initial key lookup operation that otherwise is performed to check whether the record being loaded is a duplicate. If you know that your load file is clean, this can shave about 20% off the load time. But the penalty is that if there is a duplicate key, instead of skipping the record (as in the normal case), the load will abort with an error. 3. ISMBLD.LIT 2.1(129) adds a /V switch (for verbose), which displays progress information (percentage complete) during the build and load, and the elapsed time for the load, plus messages confirming the /Mx and /F switches during the load. Additional output messages may be added later. 4. ISMDMP.LIT 2.0(134) recognizes the new index values and reports them, via a new switch /V (verbose), i.e.: .ISMDMP TEST/V (/V also assumes TTY: output mode, saving you from having to enter "TTY:" in order to display the header info.) Note that as with ISMBLD, the numbers reported are based on calculations using the number of records allocated, key size, block size, and levels (and does not show the actual configuration, which would require a delay to scan the IDX blocks; that option may be added later). ISMDMP also indicates if the IDX was built using features that require a certain version of A-Shell, e.g.: .ISMDMP TEST/V Size of data record: 16 Size of dir entry: 14 Size of dir block: 1024 Size of key: 10 Type of key: 200 (A-Shell - requires 5.1.1122+) Entries per dir block: 72 Index levels: 4 Count by level: 1,3,198,14223 etc. 5. ISMBLD.SBX 2.1(129) introduced. This is a subroutine version of ISMBLD.LIT which may be more convenient for building files than having to first generate a CMD file, particularly when using the new features. The file is actually identical to ISMBLD.LIT which is why it has the same version (and hash, for that matter). It determines whether to act as a subroutine or LIT command based on how it is called. In the subroutine mode, the syntax is: xcall ISMBLD,opflags,status,fspec,keysiz,keypos,recsiz,reccnt & {,idadev,infile,maxrecs,idxblksiz,idxlvls,extrablks} opflags [num, in] - Operation flags (see IBF_xxx in ISMDEF.BSI) IBF_SECONDARY (&h0002) ! build secondary index IBF_AUTOBLKLVL (&h0004) ! auto compute block size IBF_EXISTING (&h0008) ! process existing file ( IBF_PROGRESS1 (&h0100) ! progress style 1 (% at cursor location) status [f, out] - Return status 0 = success -1 = param error -2 = load terminated in mid-record -3 = file doesn't exist (IBF_EXISTING) -4 = file already exists -5 = load file doesn't exist -6 = expanded version/blocks size requires newer A -7 = main idx doesn't exist (for secondary load) 30+ = erf values (during load) fspec [string, in] - File to create (no extension) keysiz [num, in] - size of key keypos [num, in] - key position recsiz [num, in] - record size reccnt [num, in] - # recs (initial allocation) idadev [string, in] - IDA device (e.g. "DSK7:") if not same as IDX infile [string, in] - Seq file to load from, or name of main IDX if creating a secondary IDX maxrecs [num, in] - Expected max # recs (for auto-determination of optimum idxblksiz and idxlvls; 0 to ignore) idxblksiz [num, in] - IDX block size (default 512) idxlvls [num, in] - IDX levels (default 3) extrablks [num, in] - Extra IDX blocks (if omitted, use 50%) 0.05 - 1.00 = % x 100, e.g. 0.5 = add 50%) Note that although ISMBLD.SBX shares much of the same code as ISMBLD.LIT, it offers the option of allowing ISMBLD to auto-determing appropriate values for the IDX block size and levels, based on the key size and expected maximum records (while only allocating the file for the desired initial size). Use ISMDMP XXX /V afterwards to confirm the configuration. 6. ISMROK.SBR updated: Three new optional parameters added (IDX'LVLS, IDX'BLK'SIZ, and IDX'TYPE), making the new syntax: XCALL ISMROK,CH,IDAALC,IDAAVL{,RECSIZ,KEYSIZ,KEYPOS,DEVDRV, & IDXALC,IDXAVL,IDANXT,IDXNXT,IDX'LVLS,IDX'BLK'SIZ,IDX'TYPE} IDX'LVLS [num, out] returns the number of levels in the IDX IDX'BLK'SIZ [num, out] return the IDX block size IDX'TYPE [num, out] returns a bitmap field indicating the index type: &h0002 - secondary index &h0800 - A-Shell extensions; requires 5.1.1122+ ============================================================================ A-Shell Development Notes Version 5.1.1121.9 (04 August 2008) ============================================================================ 1. --- XTREE new feature: New advanced column definition clauses RGBbgOdd=r,g,b and RGBbgEven=r,g,b may be specified to set the default background color for the odd and even rows (typically used to create a "green bar" effect to improve readability). Although you could have done this before using individual row colors, the problem was that sorting would mess up the effect (requiring that you handle your own sorting via HdrClickExit). Note that any other color settings pertaining to individual rows or cells will override these. ============================================================================ A-Shell Development Notes Version 5.1.1121.8 (03 August 2008) ============================================================================ 1. --- New SPOOL.SBR switch: SSW_APEX (4194304 or &h0400000) acts like SSW_PREVIEW (524288 or &h80000) except that if not being processed on a local A-Shell Windows or ATE client PC, it will be ignored so that the client can process it when the file is aux-printed to it. (Otherwise the preview processing on the server side may result in EZTYP previewing, which is the only kind possible on the server side over telnet. ============================================================================ A-Shell Development Notes Version 5.1.1121.7 (02 August 2008) ============================================================================ 1. --- ATE fix: A problem with aux port file transfers (via ATEAPX.SBX or TAB(-10,AG_SPOOLCFG) and printing) that was introduced in 1121.5 fixed. 2. --- INFLD fix: TYPE |] (don't pad or strip blanks) was not being respected in the case of displaying a matching item from a combo box based on a partial match (causing a failure to match an item starting with spaces). ============================================================================ A-Shell Development Notes Version 5.1.1121.6 (31 July 2008) ============================================================================ 1. --- ISAM-A AIX bug fix: Attempting to GET'LOCKED a record that was locked by another user was generating a Basic error 23 (protection violation) rather than just returning the ISAM_NA (-2) status. (Problem only affected AIX due to a difference in the way it handles such lock conflicts internally.) 2. --- ATE MX_GDICALC fix: Opening a printer context for the PROMPT: printer was using the default printer rather than prompting. (Note that this fix also requires that the server side be updated, lest the delay caused by prompting may cause the command to time out on the server side.) 3. --- MX_GDICALC fix: Using a rectangle too small to hold any characters was causing an infinite loop. 4. --- ASHLPD-related enhancement: When A-Shell looks for an image or xtext file, it now checks the ASHLPD: directory if it fails to find it in the specified location, or in the ATECACHE or ATEPERMCACHE directories. This is mainly useful for ASHLPD. 5. --- ASHLPR.SBX 1.4(117) now handles GDI files with embedded //XTEXT commands. (Separately transfers the XTEXT file to ASHLPD so that it can be processed locally, same as it does with //IMAGE commands.) ============================================================================ A-Shell Development Notes Version 5.1.1121.5 (29 July 2008) ============================================================================ 1. --- ATE-ATSD fix: Close loophole by which file transfers using the aux port protocol might be confused by ATE with something to be printed or previewed. 2. --- APEX bug fix: A failed search operation was crashing with a GPF if the associated messages had not yet been loaded (by some other printing operation.) 3. --- MX_GDICALC enhancement: The font width parameter is now supported. ============================================================================ A-Shell Development Notes Version 5.1.1121.1 (25 July 2008) ============================================================================ 1. --- ATE-ATSD printing fix: Some tracing and printing messages were ending up on the ATSD console rather than on the ATE client, causing the job to appear to hang. Tracing messages are now forwarded from the server to the ATE client for display in ATE's debug message window. ============================================================================ A-Shell Development Notes Version 5.1.1121.0 (23 July 2008) ============================================================================ 1. --- New ISAM-A feature: "Pure" indexes. These are indexes (IDX files) that have no accompanying DAT file. To create them, set the record size to 0. These could be useful for situations where you want to create a synthetic index that wouldn't otherwise be legal, or perhaps an index to some other kind of data. Note that to maintain such indexes, you use the normal ISAM-A statements, just as if there was data attached. (The "record" in this case, is just a copy of the key.) Prior to using CREATE'RECORD, you must set the record number variable associated with the file to the appropriate value that you want associated with the key. After looking up the key, for example, using FIND, the record number variable will be returned to you (so that you could then access the record by whatever means). ============================================================================ A-Shell Development Notes Version 5.1.1120.2 (23 July 2008) ============================================================================ 1. --- EZTYP/APEX confusion fix: Previously, PRINT FILE/PREVIEW would have launched EZTYP if not running under a local Windows GUI. This was disappointing those who were running ATE and expecting the operation to result in the file being previewed in APEX. Now, PRINT FILE/PREVIEW will just proceed with the print operation (which hopefully involves DEVICE=AUXLOC:) and just passes the PREVIEW flag along to the printer. Thus, from an ATE connection to either UNIX or ATSD (Windows), PRINT LOCAL=FILE/PREVIEW will display FILE in APEX on the ATE workstation, provided that the LOCAL printer init contains DEVICE=AUXLOC: and that the ATE Preview Preferences are not set to NEVER. If you want to force the use of EZTYP, use EZTYP.LIT, or an EZ-SPOOL configuration file. ============================================================================ A-Shell Development Notes Version 5.1.1120.1 (21 July 2008) ============================================================================ 1. --- XTREE bug fix: Image cells were being lost when using XTROP_RESELECT in non-editable trees. 2. --- APEX bug fix: The %# (total pages) macro was computed the total page count incorrectly for GDI reports. (It was counting each GDI command as a line when figuring lines per page.) ============================================================================ A-Shell Development Notes Version 5.1.1120.0 (19 July 2008) ============================================================================ 1. --- XTREE enhancement: New selection style options (xtr'selectarea), defined in XTREE.DEF: define XTRSEL_STY_ALL_GRD = &h0050 ! [109] STY_ALL + gradiant define XTRSEL_STY_CELLS_GRD = &h0060 ! [109] STY_ALL + gradiant define XTRSEL_STY_CELL1_GRD = &h0070 ! [109] STY_CELL1T + gradiant These are equivalent to the existing options (without the _GRD suffix) except that if the version of Windows supports the GDI+ subsystem, the selection bar is turned into a gradiant with a dotted outline. (Eye candy) 2. --- XTREE enhancement: New character search mode options, set via a new field in the XTRCTL structure (XTR'SEARCHMODE): map1 XTRCTL ! extended XTREE parameters ... map2 XTR'TARGETCOL,B,1 map2 XTR'NFSELSTYLE,B,1 map2 XTR'SEARCHMODE,B,1 map2 XTR'UNUSED,X,17 The options are defined as follows (in ASHINC:XTREE.DEF) define XTRSRCH_TOP_ALL = 0 ! (dflt) all chars, items, from top define XTRSRCH_TOP_ONE = 1 ! one char, all items, from top define XTRSRCH_NONE = 2 ! no search define XTRSRCH_TOP_ALLX = 3 ! like TOP_ALL but skip collapsed deps define XTRSRCH_TOP_ONEX = 4 ! like TOP_ONE but " " define XTRSRCH_NXT_ONE = 5 ! like TOP_ONE but start from cur itm, wrap define XTRSRCH_NXT_ONEX = 6 ! like TOP_ONEX but " " " define XTRSRCH_NXT_ALL = 7 ! like TOP_ALL but start from cur item define XTRSRCH_NXT_ALLX = 8 ! like NXT_ALL but skip collapsed deps Previously, mode 0 (XTRSRCH_TOP_ALL) was always set. The options can be understood as follows: "_TOP" vs "_NXT": Indicates whether the search operation always restarts from the top, or from the current item. In the latter case, it wraps from the bottom back to the top. "_ALL" vs "_ONE": Indicates whether the search is based on all the characters in the cells of the current column, or just the one first character. In the _ALL case, characters typed within 1 second of the previous character are added to the search key; after 1 second, the key is reset. So for example if you type "AB" within 1 second of each other, it will search for items starting with the combination "AB" (not case sensitive). If more than 1 second passed between the "A" and the "B", it restarts the search looking for items beginning with "B". The "_ONE" option effectively sets the timer to zero, so that each character typed restarts the search. "X" (_ALLX, _ONEX): The "X" on the end indicates that collapsed child items are skipped. Otherwise, the search considers all items, and if it matches a collapsed child item, that child and all its siblings and parents are expanded. 3. --- Calendar control bugfix: Querying the control to get the date showing (via CTLOP_QRYCB) was returning 0 unless the control had been updated by some external event (mouse click, system clock changeover, gaining the focus, etc.) 4. --- EFS (Encrypted File System for A-Shell/Linux) updated to build 112. 5. --- MX_EXPFIL bug fix: It was returning positive values for system errors, rather than negative. ============================================================================ A-Shell Development Notes Version 5.1.1119.2 (09 July 2008) ============================================================================ 1. --- XTREE refinement: The determination of whether a "\" marks the beginning of hidden text has been improved for array-mode trees. Previously, unless one of the columns specified the cformat code "\", all backslash characters were considered as the start of hidden text (from there to the end of the row). This was taking people by surprise, especially when the backslash occurred in an editable column (like in a filespec). The new rule is that a backslash will be treated as a literal character if ANY of the following is true: - The cformat code "\" is present for any column (as before). - The backslash occurs prior to the last physical column in the array data (without regard to the order in which the logical columns are defined). - The last physical column is editable. 2. --- Startup command line parsing bugfix: A-Shell scans the startup command line for "\n" in order to allow multi-line commands (virtual command files) to be passed on the ashell (or ashw32) command line. It has always had a test to determine whether any "\n" was part of a filespec (e.g. c:\new.txt) but the test failed to recognize the case where the filespec was preceded by a "=" with no space. Thus: ... ztxfer xxx=c:\temp\new.txt would have been intepreted as: ... ztxfer xxx=c:\temp <newline> ew.txt 3. --- Rogue filespec bugfix: Filespecs longer than 256 chars were in some cases corrupting the A-Shell stack (usually causing A-Shell to crash.) ============================================================================ A-Shell Development Notes Version 5.1.1119.1 (07 July 2008) ============================================================================ 1. --- MX_COPYFILE bug fix: attempting to copy a random file via its file channel was sometimes causing a program abort. 2. --- INPUT CSV bug fix: hitting EOF while trying to match up a double-quote was causing an infinite loop (problem introduced in 1119.0). A-Shell now displays a warning message when this situation arises, since it almost certainly indicates a problem with the parsing of the data. ============================================================================ A-Shell Development Notes Version 5.1.1119.0 (06 July 2008) ============================================================================ 1. --- INPUT CSV enhancement: two new variations may be enabled via new ASFLAG.SBR flags: AF_CSVNOQUOTE 2048 (&h800) Disables all special handling of double-quote characters (ASCII 34, or "), treating them as ordinary data characters. AF_CSVSMARTQUOTE 4096 (&h1000) Enables "smart" handling of double-quote characters. A-Shell looks at the context of the line to guess whether a double-quote character is being used to enclose a field (that may contain special characters, including line breaks), or it is simply an ordinary data character. 2. --- INPUT CSV fix: Fields that started with a double-quote were being effectively terminated at the next double-quote, so that a field like: "There are 12" in a foot" was being reduced to "There are 12". 3. --- INPUT CSV fix: Double-Double-quotes were not being intepreted as a single double-quote data character unless the field was quoted. Thus the following line: There are 12"" in a foot would have remained unfiltered, while this line: "There are 12"" in a foot" would have ended up with 12" instead of 12"". ============================================================================ A-Shell Development Notes Version 5.1.1118.6 (03 July 2008) ============================================================================ 1. --- GDI printing fix: The special symbol "%#" (which is supposed to be replaced by the total number of pages in the printout) wasn't working. 2. --- APEX now supports the DELETE switch in SPOOL.SBR, as well as the DELETE command in the printer init files, to delete the file after previewing. 3. --- STATIC & PRIVATE variable initialization bug fix: These variables were getting cleared but not properly re-initialized when re-running a RUN or SBX file from memory (i.e. either due to the automatic cache or the LOAD command.) ============================================================================ A-Shell Development Notes Version 5.1.1118.5 (02 July 2008) ============================================================================ 1. --- Remove screen warning message "Class Already Exists" when calling the InitCommonControlsEx() function to initialize the Windows Common Dialog Control classes. Apparently the condition occurs in some versions of windows, but is harmless and not worth bothering the user about. ============================================================================ A-Shell Development Notes Version 5.1.1118.4 (02 July 2008) ============================================================================ 1. --- AUTLOG.SBR fix: back out change to default buffer size made in 5.1.1117.0 (was causing some kind of interference with the Autolog interface). Note that you can still increase the buffer size (i.e. maximum packet size) by passing the larger packet variable size in the initial AUTLOG call. As a byproduct of the debugging, there are now a number of traces that will appear within AUTLOG.SBR if you set the XDEBUG trace flag. ============================================================================ A-Shell Development Notes Version 5.1.1118.3 (29 June 2008) ============================================================================ 1. --- APEX / W2K compatibility fix: the buttons on the APEX toolbar to the right of the "Close" button were not appearing at all in W2K. ============================================================================ A-Shell Development Notes Version 5.1.1118.2 (27 June 2008) ============================================================================ 1. --- Windows printing bug fix: PITCH=AUTO was not adding the LMARGIN value to the line length to compute the required font, thus causing lines to be truncated by the amount of the margin. 2. --- APEX bug fix: A-Shell was hanging in the case where the printfile ended in an unterminated line that contained a FF followed by some other garbage. ============================================================================ A-Shell Development Notes Version 5.1.1118.0 (27 June 2008) ============================================================================ 1. --- CentOS arithmetic bug fix: Calculations involving B4 variables which had been assigned negative values were not working properly. Although B variables are unsigned, it is legal to assign them negative values, and for the most part, when performing calculations involving other B variables, the results are actually consistent. For example: MAP1 BTOT,B,4 MAP1 BVAL,B,4 BTOT = 100 BVAL = -5 BTOT = BTOT - BVAL The resulting BTOT should be 105 (100 - -5). But under CentOS, apparently due to a change in the C compiler behavior, BVAL was getting "pinned" to the minimum signed integer of -(2^31), causing BTOT to be set to a very large number. This kind of arithmetic operation is dangerous in the best of cases (any assignment of an intermediate value to an F variable will mess the results up), but we discovered at least one app that was relying on the above kind of calculation working, and which broke when migrating from the -rh8x (Red Hat 8.x) to the -el4 (RHEL 4/5 or CentOS 4/5) version. Note: this fix will also be retrofitted to 5.0.999.8 2. --- AIX neg/pos crossover fix: Similar to the above issue, there was a problem with calculations involving B or I variables when they crossover over the maximum or minimum value (thereby changing from positive to negative). (This is the same fix as was previously released as 5.0.999.7). 3. --- APEX bug fix: Files with //GDI directives but with no explicit page breaks were causing an infinite loop (creating large output files). (This combination is not recommended, as the preview proprocessor is unable to accurately predict the page break locations that will occur with a particular output device, but it no no longer creates havoc.) Also, a minor problem in which a trailing FF in a proper GDI printfile was causing the preview to indicate an extra blank page, even though such trailing FF chars no longer generate a blank page in the real output - see 1117.7 notes below. 4. --- APEX bug fix: The printer init statements LMARGIN and TMARGIN were being ignored. ============================================================================ A-Shell Development Notes Version 5.1.1117.7 (25 June 2008) ============================================================================ 1. --- Windows printing bug fix: The last line of a print file was being ignored if it had no line terminator (except in the case of a trailing FF). Also, although arguably the handling of a trailing FF was correct, it didn't match the way 5.0 handled it. (For non-PASSTHROUGH, i.e. GDI printouts, a trailing FF is not needed to eject the page, but apparently some applications added one anyway, for historical purposes.) A-Shell now ignores a trailing FF when previewing or whenever in non-PASSTHROUGH mode, provided that the FF is really the very last character of the file. If you want such a trailing FF to have an effect (i.e. eject an extra blank page), then follow it with a LF or CRLF or even just a space. 2. --- Windows printing refinement: When the specified printer doesn't exist, or when previewing with DEVICE=PROMPT:, and the last printer selected no longer exists, A-Shell now displays the warning message but then prompts for a new printer. Previously it just complained and then aborted the print operation. ============================================================================ A-Shell Development Notes Version 5.1.1117.6 (25 June 2008) ============================================================================ 1. --- APEX bug fix: The EZTYP wrapper for APEX was, in some cases, inappropriately trying to save and restore the screen, even through this is not necessary with APEX (since it uses a separate window); this was having some bad side effects on some GUI programs (like destroying the existing controls). ============================================================================ A-Shell Development Notes Version 5.1.1117.4 (25 June 2008) ============================================================================ 1. --- NT4 / W98 compatibility improvement: Trying to launch A-Shell 5.1 under NT4 or W98 was causing it to crash with a message about failure to link FlashWindowEx and/or SHGetFolderPath. These routines are now dynamically loaded only on demand. ============================================================================ A-Shell Development Notes Version 5.1.1117.1 (20 June 2008) ============================================================================ 1. --- FTPDLX bug fixes: 1) transferring a file to/from the root directory of a device was generating a strange error message and aborting the transfer. 2) the automatic re-registration of ftpdlxcall2.dll that occurs on the first FTP transfer for a session was registering the 5.0 version of the module (in some cases leading to an error creating the COM instance). ============================================================================ A-Shell Development Notes Version 5.1.1117.0 (16 June 2008) ============================================================================ 1. --- AUTLOG.SBR refinements: default minimum buffer size increased from 3000 to 7200, and error messages improved slightly. 2. --- MIAME.INI refinement: It is now possible to insert comments (starting with either ; or #) above the SERIAL= line in the MIAME.INI. The INI also now supports an optional [MIAME] section header at the top (making it easier to use standard INI-processing routines, including INIX.SBX, for updating it). ============================================================================ A-Shell Development Notes Version 5.1.1116.6 (13 June 2008) ============================================================================ 1. --- FTPDLX Refinements: FtpDLXcall2.DLL 5.1.0.204 now supports flag 512 (rename host file after copy) in conjunction with wildcarding. Also, when wildcards are specified, an additional log file, ftpdlx.lst, will be created showing the wildcard and the matching files, and if the renaming option is on, the ftpdlx.log file will also show each individual rename. Also, if the remote server doesn't allow renaming if the target already exists, FTPDLX will send an explicit delete command and then try renaming. ============================================================================ A-Shell Development Notes Version 5.1.1116.5 (11 June 2008) ============================================================================ 1. --- Bug fix: EZTYP was aborting with a memory allocation failure on large files. (Affected UNIX versions only). ============================================================================ A-Shell Development Notes Version 5.1.1116.4 (11 June 2008) ============================================================================ 1. --- Bug fix: EZTYP wasn't performing the auto-switch to 132 column mode. 2. --- Compiler bug fix: /CI (case insensitive) wasn't working with functions. New version of standalone compiler: 1.2(403) 3. --- MEM: device bug fix: Basic LOOKUP statement wasn't recognizing the MEM: device (or AUTO_MEMOPEN). In addition to the fix, LOOKUP operations are now traced when the FOPENS trace flag is set. ============================================================================ A-Shell Development Notes Version 5.1.1116.3 (10 June 2008) ============================================================================ 1. --- Fix EZTYP failure in A-Shell/Linux -el4 (RHEL/CentOS) version. ============================================================================ A-Shell Development Notes Version 5.1.1116.2 (10 June 2008) ============================================================================ 1. --- Memory File I/O bug fix: The EOF flag was being set one INPUT statement too soon when inputting from a file loaded into user memory (either by referencing the MEM: device or by using the OPTIONS=AUTO_MEMOPEN). That is, it was being set after returning the last line of the file, instead of waiting for the next attempt to read when there was no more data. Note that the EOF flag really means that we hit EOF before completing the operation. It does not mean that no data was returned. If the last line of a file does not end with a terminator (CRLF or LF), then the EOF flag will be set at the end of returning the last line, even though valid data was input. So to be really sure you are processing all the data in a file, do not assume that EOF means that no data was input. For example: do input line #ch, pline if eof(ch)=1 exit <process pline> loop The above loop is typical but fails to process the last line of the file if that line was not terminated with a CRLF or LF. do while eof(ch) = 0 input line #ch, pline <process pline> loop The above loop solves that problem, but will process a null line at the end of the file if the last line was properly terminated. To avoid that, you need an additional test... do input line #ch, pline if eof(ch)=0 or pline#"" then <process pline> else exit endif loop The above loop handles both cases properly, processing each line if either EOF has not yet been reached, or if data was input (even if the EOF was reached). 2. --- ATE enhancement: You can now pass arbitrary command line arguments from ATE to ASHW32 using a new meta-parameter: -ashargs "xxxxxx" Where "xxxxxx" is any set of legal ASHW32 command line switches, provided they themselves do not contain any quotes. For example: "c:\program files\ate\bin\ate.exe" -ashargs "-mx -m" myprofile The switches -mx and -m will be inserted into the ASHW32 command line used by ATE to launch the emulation session. ============================================================================ A-Shell Development Notes Version 5.1.1116.1 (09 June 2008) ============================================================================ 1. --- XTREE enhancement: file mode now supports cformat "o" to allow the previous cell to overflow and merge into the current cell if the current cell is empty. Note that this could affect the layout of the returned item in the array parameter, so if it is critical to you that all spaces be preserved in that line, don't use this code. 2. --- MX_GETOFD (95) refinement: In the case of error 0x3002, it now reports additional information ("invalid filename" and the text of the passed in filename.) 3. --- ATE version mismatch workaround: When running A-Shell 5.1 and ATE 5.0.9997.4 or below, the MIAMEX,MX_GETOFD was aborting with error 0x3002. This update checks the ATE version, if applicable, and implements the workaround to improve backwards compatibility. ============================================================================ A-Shell Development Notes Version 5.1.1116.0 (08 June 2008) ============================================================================ 1. --- Imaging enhancement: Add rudimentary support for PNG image format, via AUI_IMAGE, IMAGE.SBR, AUI_CONTROL, //IMAGE, and XTREE. (Saving scanning images to PNG not yet supported, nor is the alpha channel, except in XTREE.) File extension must be PNG or WMF. (The latter is a weird case - apparently in some cases WMF files may actually be PNG files.) Several new PNG- specific error status codes added to the AUI_IMAGE functions: -100 Unknown critical chunk -101 Not enough IDATs for image -102 Invalid IHDR chunk -103 Invalid bit depth in IHDR -104 Invalid color type in IHDR -105 Invalid color type/bit depth combo -106 Invalid interlace method in IHDR -107 Invalid compression method in IHDR -108 Invalid filter method in IHDR -109 Invalid image size in IHDR -110 Bad PNG signature -111 Bad CRC value -112 Extra data at end of file -113 Unexpected End Of File -114 Memory error -115 Decompression error -116 Compression error -117 Out of disk space 2. --- INMEMO refinement: HOME and Control+E (END) now supported in display paging mode. 3. --- XTREE fix: ClickExit and HdrClickExit definitions for column 1 were acting as the default for all other columns. 4. --- XTREE fix: ClickExit and HdrClickExit exits weren't always setting XROW and XCOL correctly. (TARGETROW/TARGETCOL were ok.) ============================================================================ A-Shell Development Notes Version 5.1.1115.4 (06 June 2008) ============================================================================ 1. --- INFLD bug fix: raw input (TYPE @) was not setting exitcodes for function keys. ============================================================================ A-Shell Development Notes Version 5.1.1115.3 (05 June 2008) ============================================================================ 1. --- Bug fix: EZTYP was not working under UNIX. 2. --- W98 workaround: ASHW32.EXE 5.1 now works under W98. Previously it failed to launch, reporting an error linking PrtDlgEx. (Note that for various reasons, you should probably use the "c" version with W98). 3. --- ASHW32 now warns you when trying to create GUI controls, if your terminal driver doesn't support graphics. ============================================================================ A-Shell Development Notes Version 5.1.1115.2 (04 June 2008) ============================================================================ 1. --- Fix bugs relating to recently introduced support for AUTO_MEMOPEN with sequential input files (see 5.1.1114.0 below): - Byte value 0xFF was being confused with EOF. - XCALL GET was crashing when it tried to input from a memory file. - RUN, LIT, and SBX files, and any file with "in use" flag set, are now excluded from AUTO_MEMOPEN consideration. An example of a program that was failing prior to the above fixes is DIR/V. (For example, DIR/V [] was finding itself in memory when trying to read the version info from the file, then crashing because it uses XCALL GET to read the binary version info.) 2. --- MX_REGISTRY fix: The set operation (opcode 3) wasn't working for DWORD types. It was always setting them to 0. 3. --- XTREE fix: The focus was being lost after using the space bar to toggle a checkbox or radio button cell. ============================================================================ A-Shell Development Notes Version 5.1.1115.1 (02 June 2008) ============================================================================ 1. --- Wildcard fix: COPY, MOVE, and RENAME were not properly handling the replacement of wildcards in the output spec when the corresponding character in the matching input filespec was null. For example: .COPY A?=B? This as properly copying BX to AX, but it was incorrectly copying B to A?. (The null byte in the 2nd position of the filename "B" was not replacing the wildcard "?" in the output.) The new command versions are: COPY.LIT 276-064-513-763 3.2(130) MOVE.LIT 276-064-513-763 3.2(130) RENAME.LIT 137-624-611-443 3.0(111) Note: these updates will also work under A-Shell 5.0. Currently they are only available via the 5.1 Update Center (ASHUPD) but will probably be added to the 5.0 Update Center packages at some point. Also note that it is not a mistake that MOVE.LIT and COPY.LIT are identical. (See next item for explanation.) 2. --- MOVE.LIT enhancement: MOVE.LIT now works under Windows (previously was only under UNIX) and supports all of the switches and syntax options of COPY. (Both are implemented via MIAMEX, MX_COPYFILE, for which the difference between MOVE and COPY is just one bit in the FLAGS.) As with COMPIL and OCMPIL (another example of two identical programs with different names), the program checks its own name and runtime to decide which way to act. ============================================================================ A-Shell Development Notes Version 5.1.1115.0 (30 May 2008) ============================================================================ 1. --- WINDOWS GDI Printing enhancement: New printer init parameters: XORIGIN=### YORIGIN=### These define the MINIMUM offset from the top left physical corner of the paper to the 0,0 print position (in twips). A-Shell and APEX will operate on the LARGER of the XORIGIN,YORIGIN values and the physical margin as defined by the printer driver. So in other words, if you set them each to 360, you should get AT LEAST 1/4" top/left margin, even on printers (like some image printers, PDF printers, and even APEX itself) that don't have any built-in physical margin limitation. This can be very useful in reducing the alignment fluctuations between different printer models caused by differing hardware paper margins. 2. --- XTREE enhancement: Previously, the COLDEF parameter was ignored in file mode when the XTF_FCOLDEF flag was set. Now, the COLDEF parameter may be used in that situation to add to, or replace the column definition in the file, and optionally to cause the first several lines of the data file to be skipped (i.e. so that header or other meta-data can be included in the file without being interpreted as data by XTREE). In order for the COLDEF parameter to be treated as significant (when XTF_FCOLDEF is set), it must begin with "+", "-", or "=". Syntax: {-skipval}+<COLDEF string> {-skipval}=<COLDEF string> The optional {-skipval} clause, which must be first if present at all, is used to force lines of the data file to be skipped. If skipval is a number (e.g. "-5"), then XTREE ignores that number of lines at the top of the file (not counting the first line, which is interpreted as a column definition string due to the XTF_FCOLDEF flag). If skipval starts with a character other than 1-9, it is interpreted as a string label (31 chars max); data interpretation will start with the line in the file following the line that starts with the label string. (Warning: the label string should not include "+", "-", or "=".) For example, consider this file: 1~5~Zip~#~7~30~City Name~S~~ bla bla bla bla bla bla xtreedata: 06104 Belmont 00922 Puerto Nuevo <etc> The file contains a column definition string in the first line, followed by three non-data lines, followed by N data lines. To tell XTREE to skip over those non-data lines, you could set the COLDEF parameter to one of the following: COLDEF = "-xtreedata:" ! skip until after "xtreedata:" label COLDEF = "-3" ! skip 3 lines Instead of, or in addition to skipping lines, you can also use the COLDEF parameter to append to, or replace, the column definition string in the file. To append, use "+" followed by a legal COLDEF definition string. Appending is useful when you want to add something non-data specific, such as a popup menu, which may depend on runtime application logic. To replace, use "=" followed by a legal COLDEF definition string. Replacement is probably most useful when you didn't really want to put the column definition in the file at all, but needed to in order to use the -skipval feature (since all of these special COLDEF parameter features discussed here require the XTF_FCOLDEF flag). Some legal examples: ! use column definition from the file, as is. COLDEF = "" ! skip 3 lines (plus column def line), append popupmenu to col. def. COLDEF = "-3+0~0~x~H~PopupMenu=Eat,VK_xF100;Drink,VK_xF101~~ ! skip to "data:" label, replace col. def entirely COLDEF = "-data:=1~5~Zip~#~RGBbg=50,100,200~~7~30~City~S~~ Note that column definition string following the "+" or "=" in the examples above must meet all of the normal COLDEF syntax rules, including ending with ~~. 3. --- AG_SETCOLOR enhancement: It is now possible to query the RGB definitions of any of the A-Shell palette colors using a variation of the AG_SETCOLOR syntax. (In this mode, AG_SETCOLOR is a misnomer; a new symbol, AG_PALETTE has been added to ASHELL.DEF which has the same value as AG_SETCOLOR (15), for anyone bothered by confusion that might be created by using a function called AG_SETCOLOR to query the colors.) New syntax: ? TAB(-10,AG_PALETTE);ctype,cnum{,r,g,b};chr(127); ctype: 1=set fg color, 2=set reduced fg color, 3=set bg color, 4=get fg color, 5=get reduced fg color, 6=get bg color cnum (same as before): 0-7 to specify the palette entry # r,g,b (same as before): The R, G, and B values (0-255), used when ctype <= 3. When ctype >= 4, the command will send back into the keyboard buffer a string formatted as "R,G,B" indicating the RGB values currently defined for the specified palette entry. 4. --- AG_GETENV enhancement: The TAB(-10,AG_GETENV) command now optionally "de-mangles" paths. New syntax: ? TAB(-10,AG_GETENV);"var,1";chr(127); If the ",1" is appended to the environment variable name, as shown above, then the result will be "de-mangled" (i.e. converted from the DOS 8.3 compressed format to the full long format), if possible. For example: ? TAB(-10,AG_GETENV);"TEMP",chr(127); The above command (without the ,1) might return something like: C:\DOCUME~1\yourname\LOCALS~1\Temp ? TAB(-10,AG_GETENV);"TEMP,1",chr(127); The above command (with the ,1) might return something like: C:\DOCUMENTS AND SETTINGS\yourname\LOCAL SETTINGS\Temp 5. --- MX_GETENV enhancement: A new optional parameter allows the returned environment variable definition to "de-manged" if applicable: XCALL MIAMEX, MX_GETENV, envvar, value {,flag} If the flag parameter is specified and set to 1, then the returned value will be de-mangled. (See AG_GETENV above for details.) 6. --- AUI_CONTROL fix: Setting the parentid parameter for a dialog to -1 (to force the dialog to be positioned relative to the main window, regardless of whether there was already a modal dialog defined) wasn't working due to signed/unsigned arithmetic confusion. 7. --- Windows Refinement: The centralized help file loader now reports detailed error messages when it fails. Previously it may have remained silent. ============================================================================ A-Shell Development Notes Version 5.1.1114.0 (27 May 2008) ============================================================================ 1. --- GDI printing enhancement: New printer init commands to affect minor horizontal and vertical adjustments to the overall positioning of everything on the page, except images: XOFFSET = ### YOFFSET = ### The units are twips (1440 to the inch), with positive values shifting the output down and to the right, negative up and to the left. The concept here is to make it easier to adjust the output of existing reports designed for plain or pre-printed forms, to instead use scanned, printed-as-you-go forms. Often this presents difficulties in getting the text to line up with the form due to minor fluctuations in the size of the form image introduced by scanning or scaling to print. Note that the TMARGIN and LMARGIN commands are not very useful for this kind of thing, partly because they operation in such coarse units, partly because they have other side effects, and partly because they don't affect X,Y coordinate positioning (in GDI directives). The XOFFSET and YOFFSET parameters were designed to overcome these issues and should be used instead. 2. --- New feature: The MEM: device, (as well as OPTIONS=AUTO_MEMOPEN), can now be used with sequential input files. For example: OPEN #1, "MEM:MYFILE.TXT", INPUT The above statement would work if MYFILE.TXT was loaded into the user memory (using LOAD MYFILE.TXT). OPEN #1, "DSK1:MYFILE.TXT[123,456], INPUT As with RANDOM files, if OPTIONS=AUTO_MEMOPEN, then the above OPEN statement will first check user memory to see if MYFILE.TXT is loaded, and if so, will use that copy directly. ============================================================================ A-Shell Development Notes Version 5.1.1113.8 (26 May 2008) ============================================================================ 1. --- XTREE enhancement: Date columns (D) that include both a date and a time (e.g. "25-May-08 08:25 PM") will now be sorted taking both into account. 2. --- XTEXT refinement: HTML browsing mode now automatically sets TXF_FITVIEW and TXF_WRAP. (Without these, the browsing display is likely to be empty or corrupt, so there's no good reason not to set them, other than to leave you wondering why browsing doesn't work.) ============================================================================ A-Shell Development Notes Version 5.1.1113.7 (24 May 2008) ============================================================================ 1. --- Bug fix: I,2 variables were not holding negatives values correctly under AIX. 2. --- APEX bug fix: Full page images in the Preview window were being shrunk by an amount corresponding to the physical top and left margin of the printer. (The effect was mainly seen on near the right and bottom edges, although if you were overprinting the image with precisely-positioned text, it was appearing slightly off in the Preview.) ============================================================================ A-Shell Development Notes Version 5.1.1113.6 (23 May 2008) ============================================================================ 1. --- APEX bug fix: using the XTREE Print Preview was corrupting the saved preview settings, such that when you next tried to preview a report sent to the PROMPT: printer, you would likely get a "Printer $#s@ not found" message. Thanks to Stephen Funkenhauser for helping resolve this unusual one. ============================================================================ A-Shell Development Notes Version 5.1.1113.5 (22 May 2008) ============================================================================ 1. --- XTREE bug fix: FastMax=# was not recognizing a trailing space as counting against the max. Also if the shift key was down, it was advancing to the previous rather than then next field (i.e., the automatic TAB was acting like Shift-TAB). ============================================================================ A-Shell Development Notes Version 5.1.1113.4 (22 May 2008) ============================================================================ 1. --- XTREE bug fix: Clicking on an editable radio button was updating the button but then immediately losing the focus. (Probably apparently introduced in the 60 version of the DLL.) ============================================================================ A-Shell Development Notes Version 5.1.1113.3 (20 May 2008) ============================================================================ 1. --- XTEXT enhancement: HTML form return data now starts with "&url=<spec>" where spec is the URL of the form, or the local filespec. This is mainly of interest in the case where hyperlinking is permitted, thus allowing the user to navigate to a form that might not be the one expected by the program. So now the return buffer (when exitcode=30) will look something like this: &url=c:\vm\dsk0\908040\demo2.htm&action=mailto:jack@m.com&method=POST&... See 1112.2 below for more info on HTML forms. 2. --- Windows Bug fix: fix loophole in XTREE trace logic causing a possible GPF. 3. --- Windows FTP bug fix: wodftpdlx.dll 2.8.2.415 fixes a problem introduced in version 2.8.1.413 (included with A-Shell 5.1), in which the client would simply fail to connect to the server. (Because the fix is not in ASHW32.EXE, you'll need to use the Update Center or run the installation process again to get a complete update.) Some of the FTP bug fixes covered in this update (since the 2.7.0.303 version which shipped with 5.0): - Local timezone (with conversion from UTC) is now used in all date- related functions. - IBM directory format support in directory parser - Fix directory parsing problems related to making multiple connections with the same instance, due to variables being re-used. - Fix failure to properly report local disk full error. - Fix problem in the initial SFTP connection on some Linux servers 4. --- INFLD GUI refinement: The "correction" introduced in 5.1.1111.1 (see below) in which INFLD acted as if the caret was at the start of a fully selected (destructive mode) field has now been backed out, due to complaints of it affecting existing users who were counting on that bug as a feature. In order to provide a workaround for those wanting the original bug fixed, there is a new MIAME.INI option: SBR=INF_GUISELPOS. 5. --- XTREE refinement: The FastMax=# clause is now compatible with cell validation. 6. --- XTREE bug fix: Trees containing editable checkboxes but no other editable cells were sometimes getting vertically resized on the first click (causing the checkbox focus marker to no longer line up with the actual row). ============================================================================ A-Shell Development Notes Version 5.1.1113.2 (18 May 2008) ============================================================================ 1. --- XTEXT.DEF additons: new symbols TXF#_xxxx added to define all the possible flags in TXC'FLAGS1 thru TXC'FLAGS7 2. --- Enhancement to a proprietary custom subroutine: SBR=XMASCB_OPEN Adding this option to the miame.in causes the xMASCB routines to optimize their open/close logic so that files are kept open for the duration of the current program. ============================================================================ A-Shell Development Notes Version 5.1.1113.1 (16 May 2008) ============================================================================ 1. --- XTREE enhancement: New COLDEF clause FastMax=# sets the number of characters for an editable text or combo field which can be entered before it automatically advances to the next field. This supercedes InfDef=F, which no longer does anything. 2. --- XTREE enhancement: You can now force overwrite mode during editing (instead of the normal insert mode) by adding this COLDEF clause: InfDef=||I (||I is the INFLD code to force overwrite mode.) Note that you most likely would want to use this feature in conjunction with non-destructive mode (InfDef=||Ie), particularly when FastMax=# is being used. 3. --- XTEXT / HTML refinement: Temporary download files are now written to either the ATECACHE directory (if defined), or the TEMP directory (if defined), instead of the current directory. ============================================================================ A-Shell Development Notes Version 5.1.1113.0 (15 May 2008) ============================================================================ 1. --- XTREE bug fix: The 6.0.1 version of the SftTree_IX86_A_60.dll fixes a display problem introduced in the 6.0.0 version of the same dll, in which the horizontal grid lines were in some cases partially wiped out by the text in the cells. Since you need to update the DLL, either re-install from a complete installation package (.exe) or use the Update Center. 2. --- Bug fix: eliminate a spurious "file not found" message box during printing if the ASHCFG: ersatz doesn't exist and the SYSERR trace is set. 3. --- XTREE enhancement: "fast" edit mode now supported. (In "fast" mode, keying in the maximum number of characters automatically advances the focus to the next field, as if TAB had been hit.) To activate, use: InfDef=F ============================================================================ A-Shell Development Notes Version 5.1.1112.2 (13 May 2008) ============================================================================ 1. --- GDI printing fix: Faxing was, in some cases, crashing A-Shell. 2. --- GDI printing fix: in passthrough mode, the last character of the file or of a very large page was being dropped from the output. 3. --- XTEXT enhancement: Simple support for HTML forms implemented. As with other HTML browse modes, you must set the TXF_READONLY flag. Also, you must use buffer mode (rather than file mode) for the dst parameter. If the user clicks the SUBMIT button on a form, XTEXT returns with exitcode=30 and the action, method, and data fields are output to the dst parameter in the following format: &action=actionstr&method=methstr&name1=value1&...&nameN=valueN The fields actionstr, methstr and nameN are as defined in the form itself. (methstr will be GET or POST.) The valueN fields return the data entered by the user in the form. (Checkbox and radio button fields return 0 or 1 to indicate empty or checked.) If a value contains the character "&", the entire value string will be quoted. (So you may want to use STRTOK.SBR to simplify parsing the returned string.) =========================================================================== A-Shell Development Notes Version 5.1.1112.0 (07 May 2008) ============================================================================ 1. --- XTEXT enhancement: Underlying code module updated from TER14.DLL to TER15.DLL. Old version will continue to work if new version is not present, but you only need the latest version. No specific new features are dependent on this yet, but probably will over time. 2. --- XTEXT enhancement: New symbol definition file ASHINC:XTEXT.DEF created (to house several new symbols). Existing XTEXT-related symbols moved from ASHELL.DEF to XTEXT.DEF. (Sorry, this will cause compile errors in existing programs using XTEXT symbols, but it should be a simple matter to ++include ashinc:xtext.def to the affected programs, or, if you insist, you can add it to the ashell.def file itself. WARNING: ALWAYS COMPILE WITH /M to be sure you are using undefined symbols!!!) 3. --- XTEXT enhancement: New fields added to the end of the TXTCTL structure (in XTEXT.MAP): ... MAP2 TXC'MAXBYTES ,B,2 ! 230 max bytes allowed (0=unlimited) MAP2 TXC'MENUMASK1 ,B,4 ! 232 menu disabling flags (TXFM1_xxx) MAP2 TXC'MENUMASK2 ,B,4 ! 236 more menu disabling flags (TXFM2_xxx MAP2 TXC'HFLAGMASK ,B,2 ! 240 HTML flag mask MAP2 TXC'HFLAGS1 ,B,4 ! 242 HTML flags MAP2 TXC'HFLAGS2 ,B,4 ! 246 HTML flags MAP2 TXC'UNUSED ,X,6 ! 250 (256 total) TXC'MENUMASK1 and TXC'MENUMASK2 allow individual items and groups of menus to be removed when the TXF_MENU and TXF_POPUP flags are used. See XTEXT.DEF for the bit flag definitions. TXC'HFLAGMASK is like TXC'FLAGMASK except applies to the TXC'HFLAGS1 and TXC'HFLAGS2 fields, which in turn are like TXC'FLAGS1 thru TXC'FLAGS8 but control HTML-related options. Documentation for the flag values will be forthcoming. 4. --- XTEXT enhancement: Rudimentary HTML support added. Requires that the new module HTS10.DLL be present in the bin directory, and that you use the new TXFF_HTML with TXFF_FILE (&h104) in the TXC'DOCFMT'SRC or TXT'DOCFMT'DST fields. Currently only file mode is supported. Notes: - For browser mode, you must set TXF_READONLY. Otherwise it will be in editing mode, similar to the existing RTF editing mode. - You must use TXF_FITVIEW for all but the simplest files. - You may specify a web URL in the TXC'DOCFMT'SRC field, such as "http://www.microsabio.com". However, you may not output to a web address. (We recommend using .HTM as the extension for local HTML files.) - You can use the HTML format as simpler version of RTF with the goal of supporting just a few text attributes. To minimize the size of the outputted HTML file, you may want to set the TXC'HFLAGMASK and TXC'HFLAGS1 as follows: TXC'HFLAGMASK = &h0001 ! Set/clr all flags from HFLAGS1 TXC'HFLAGS1 = &78006 ! strip out head, body, font, style tags 5. --- XTEXT Enhancement: new flag TXTB_SHOW_HIDE (&h80000000) in TXC'TOOLBARMASK may be used in conjunction with TXF_RULER, TXF_TOOLBAR and/or TXF_STATUS to automatically remove the ruler, toolbar and status ribbon when the control is in-active, and re-display them when the control is re-activated via TXOP_REEDIT. ============================================================================ A-Shell Development Notes Version 5.1.1111.1 (03 May 2008) ============================================================================ 1. --- INFLD fix/enhancement: GUI mode now behaves more like text mode with reference to a preloaded with with destructive carriage return (TYPE `) and TYPEs L, 2, and E. In text mode, the cursor would start at the beginning of the field (unless you specified TYPE ")") and thus hitting left arrow would trigger an exit, while hitting right arrow would move the cursor to the 2nd position. Typing a printable character would replace the contents of the field with the character. GUI mode now works the same way. Previously, because the destructive option (TYPE `) is simulated in Windows by selecting the field, and because Windows always forces the cursor to be just to the right of an selected text, this was having the same effect as if you had specified TYPE ")" to force the cursor to the end of the field. Note that with this update, hitting the right arrow key will move the caret and remove the selection, but unless you also use TYPE e, it won't remove the destructive carriage return mode. (Some Windows users might be confused by that, so the combination of TYPE e` is recommended.) 2. --- XTEXT enhancement: Flag TXF_MENU (&h80000000) may now be combined with TXF_POPUP to create a text editing control window with a complete menu bar. (This exposes many new capabilities, particularly for RTF editing.) The XTX.BP 1.0(115) update in [908,40] supports the new flag. 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.1.1111.0 (01 May 2008) ============================================================================ 1. --- New GDI directives //XMFIELDS and //XMDATA to facilitate mail merge with XTEXT. Background: Mail merge is supported only by XTEXT documents in RTF or SSE format. To create the template, edit the document and insert field names by highlighting them and pressing Control-D to give them the double underline style. To perform the merge/print operation, insert one or more //XMFIELDS statements (to define the field names), one or more //XMDATA statements (to define the field replacement data), and one or more //XTEXT directives (one for each page or rectangle of output). You will also need at least a //SETMAPMODE statement to define the measurement units which are required by the //XTEXT statement, plus any other //GDI directives that you want (i.e. to combine application- generated output with the mail merge output). Syntax: //XMFIELDS,fldnam1|fldnam2|...|fldnamN //XMDATA,data1|data2|...|dataN //XTEXT,left,top,right,bottom,fspec{,pageoffset} The individual field names and data items must be delimited by the vertical bar (|). You can use multiple //XMFIELDS and //XMDATA statements, if you have a lot of fields (or long data). The important thing is that the Nth data item matches up with the Nth field name. (So in the example above, all occurrences of "fldnamN" in the document would be replaced by "dataN". NOTE: //XMFIELDS and //XMDATA both require a single comma after the name of the directive, but after that, the fields are delimited with |. Fields may contain commas and quotes but they are treated like any other character. The optional pageoffset parameter is used to specify the starting position within the fspec document for the merge. Use negative numbers for page numbers, positive for byte offsets. (-1 = page 1, -2 = page 2, etc.) Note that the //XMFIELDS and //XMDATA definitions remain live for the duration of the spool operation (i.e. the processing of the text file containing those directives, not the RTF documents reference by //XTEXT). Also note that the //XTEXT statement used for the mail merge operation is identical to that previously documented for printing regular XTEXT text. (The only difference between XTEXT mail merge/print and regular XTEXT printing is whether there are fields defined which match up with fields in the document. So you could, for example, define a set of 30 fields and corresponding data items, then issue several //XTEXT commands which may or may not reference any of those fields.) Example: //SETMAPMODE,LOENGLISH //XMFIELDS,Name|Address|City //XMDATA,Jack|123 Main St.|Woodland Hills //XTEXT,50,50,800,1000,mydoc.rtf,-1 ^L //XTEXT,50,50,800,1000,mydoc.rtf,-2 In the above example, we are printing a 2 page mail merge document. Note the need for the chr(12) (appearing as "^L") to mark the page break. 2. --- INFLD enhancement: maximum size of a SETDEF match has been increased from 50 to 300 chars. 3. --- PDFX/APEX bug fix: PDFX licensing wasn't working when documents were printed under control of APEX. 4. --- GDI printing 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. ============================================================================ A-Shell Development Notes Version 5.1.1110.1 (26 Apr 2008) ============================================================================ 1. --- Resolve conflict between 5.0 and 5.1 over the use of the FtpDLXcall.DLL (was causing FTP transfers to break after installing certain sequences of 5.0 and 5.1 updates on top of each other). The 5.1 version of FtpDLXcall.DLL has been renamed to FtpDLXcall2.DLL, and 5.1 now automatically uses it in place of FtpDLXcall.DLL. (You can remove FtpDLXcall.DLL from the 5.1 bin directory, although it does no harm). Note that both versions continue to share the last registered copy of wodFTPDLX.dll though. Each distribution has its own copy and registers it, so the latest registered copy will move around, but this should not matter, unless you then delete the latest installation. In that case, manually re-register the DLL using: REGSVR32 <path>\wodFTPDLX.dll ============================================================================ A-Shell Development Notes Version 5.1.1110.0 (24 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. --- Previous fix for multiline INFLD/GUI paste wasn't working for Control-V shortcut. 3. --- New version of the XTREE control (SftTree_IX86_A_60.DLL). (You can remove the old SftTree_IX86_A_50.DLL from the A-Shell 5.1 directory tree, as long as it isn't being shared by A-Shell 5.0). The new version of the DLL shouldn't introduce any new behavior (yet) but may open the door for some new features down the road. ============================================================================ A-Shell Development Notes Version 5.1.1109.2 (23 Apr 2008) ============================================================================ 1. --- XTREE print improvements: Zoom and page configuration now saved/restored between preview sessions (sharing with APEX). Also, help button now links to APEX.CHM. 2. --- Multiline INFLD/GUI now supports multiline clipboard paste. (Same fix as 999.5). 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.) ============================================================================ A-Shell Development Notes Version 5.1.1109.1 (19 Apr 2008) ============================================================================ 1. --- ISAM 1.0 / LOKSER bug fix: A bogus error 39 (illegal sequence) was being generated by ISAM "next" operations (function 2 or 7). Problem introduced in 5.1.1107. ============================================================================ A-Shell Development Notes Version 5.1.1109.0 (17 Apr 2008) ============================================================================ 1. --- Re-design the regular expression support, with the following highlights: - INSTREX() has been merged with INSTR(); they are distinguished by the number of arguments passed. (Detailed in separate section below.) - Remove the static link dependency on PCRE3.DLL. It is now only loaded when you first use a regular expression function. If the library cannot be found, the function will return error -98. 2. --- New and improved INSTR() function: INSTR() now accepts a 4th parameter: INSTR(spos,subject,pattern,flags) When the 4th parameter (flags) is specified (even if 0), the pattern is treated as a regular expression. This replaces the separate function INSTREX() which was initially introduced in 5.1.1108. As much as possible, both versions of INSTR() offer the same semantics. Both return the position of the located string, with 0 indicating no match. Both fail (returning 0) for each of the following conditions: - null pattern - null subject string - stpos < 0 - stpos > length of string The most important difference is that the 4-parameter (regular expression) version can return negative values indicating error conditions that go beyond a simple failure to match the pattern. These will be the same errors returned in the STATUS parameter of REGEX.SBR. INSTR() vs REGEX.SBR: The function and XCALL version reference the same internal logic, and have the same parameter semantics. The INSTR() version has less overhead and is easier to use, while the REGEX.SBR version offers additional power (mainly in the advanced area of subexpression matching, although it also returns the actual matched substring, which is often handy and not obvious). PRECOMPILING PATTERNS: Although the 20 numbered precompiled patterns (1-20) may be shared between REGEX.SBR and INSTREX(), and thus you could use REGEX.SBR to precompile patterns later used with INSTREX(), if you prefer to use INSTREX() itself to precompile patterns, set the PCREX_PRECOMPILE (&h80000000) bit in the FLAGS parameter and set STPOS to the pattern number (like PATNO in REGEX). The SUBJECT string will be ignored (can be ""). On success, the return value of the function will equal STPOS; else refer to the STATUS codes listed under REGEX. USING PRECOMPILED PATTERNS: As with REGEX.SBR, you can specify a precompiled pattern by setting PATTERN = CHR$(n) where n is the pattern number (1-20). As with REGEX.SBR, whenever the same pattern is used in consecutive calls, the previously compiled version is automatically used (making precompilation unnecessary except when alternating between multiple patterns). BACKWARDS INCOMPATIBILITY: The new, 4-parameter version of INSTR() is NOT backwards compatible with runtime versions prior to 5.1.1109. However, the RUN file itself may still be used, as long as you never actually try to execute the statement. To prevent that, you would need to test for the A-Shell version (see MX_GETVER) and only execute the new INSTR() function if the A-Shell version is at least 5.1.1109. See [908,46] in the SOSLIB for sample programs. ============================================================================ A-Shell Development Notes Version 5.1.1108.1 (16 Apr 2008) ============================================================================ 1. --- Bug fix in REGEX / INSTREX: Some flags values were preventing the match operation from working, since there were only supposed to be passed to the compile operation. Problem resolved internally. 2. --- Regular expression enhancement: You can now use Perl-style internal option settings within a pattern to change options that would otherwise require using the FLAGS parameter. The syntax is: (?...) Where ... is one or more of the following chars: i for PCRE_CASELESS m for PCRE_MULTILINE s for PCRE_DOTALL x for PCRE_EXTENDED For example, the pattern "(?i)hello" would match "HELLO", "hello", "hElLO", etc., just as if the PCRE_CASELESS flag had been set. This technique is particularly useful in INFLD, where you don't have access to a FLAGS parameter (see next). 3. --- INFLD now supports regular expressions in SETDEF, via a new TYPE code |s. When |s is specified, SETDEF is interpreted as a single regular expression, which the data field must match. Note that to invoke regular expression flags such as PCRE_CASELESS, you'll need to use the Perl-style internal option settings, e.g. "(?i)[AP]M" will match AM, PM, am, pm, etc. 4. --- XTREE refinement: File mode no longer aborts if the file is not present, provided that the XTF_FCOLDEF flag is not set. It simply creates a tree with no data in it (but with the columns set up per the COLDEF parameter.) ============================================================================ A-Shell Development Notes Version 5.1.1108.0 (15 Apr 2008) ============================================================================ 1. --- Support for "regular expressions" (do an Internet search if you are not familiar with them) has been reworked and expanded to include a new function form, INSTREX(). REGEX.SBR was introduced originally in 5.1.1100, but has been reworked, improved, expanded, and reintroduced here. BACKGROUND AND GENERAL INFORMATION: There are various implementations and flavors of "regular expressions", including POSIX and Perl. We've chosen to go with the Perl flavor, because it is generally considered better (more features, more predictable, faster) and seems to be more popular (with Java, Python and .NET for example using similar or derived implementations). The specific implementation we are using is called PCRE (Perl-Compatible Regular Expression), (see the website at www.pcre.org). Under Windows, it is housed in PCRE3.DLL (now included with the standard A-Shell distribution and loaded dynamically the first time you access a regular expression function). For the dynamic linked versions of A-Shell/Linux, there are RPMs named PCRE-#.## where #.## is the current version. Most likely you have one installed already, but if not, you can easily locate and install the current version. The "generic" (static-linked) version of