============================================================================ A-Shell Release Notes Version 6.0.1243.2 (23 Jan 2012) ============================================================================ 1. --- APEX bug fix: GDI printfiles which ended in a chr(12) not at the start of a line were appending a //directive to the end of that line. 2. --- APEX scale refinement: CTRL+LEFTCLICK no longer increases the scale to 1000%. (People were accidentally doing this and ending up confused since the document is so big it is nearly invisible at that scale.) CTRL no longer has an effect on the LEFT/RIGHT click (with magnifying glass cursor). The +/- keys at the top of the keyboard now scale up and down in fine increments (CTRL makes the increments even finer.) 3. --- PCKLST.SBR bug fix: The cursor was being turned into an hourglass and left there when in text mode. ============================================================================ A-Shell Release Notes Version 6.0.1243.1 (20 Jan 2012) ============================================================================ 1. --- GUI bug fix: maximizing a dialog created with one of the centering options was failing to re-scale the controls within. 2. --- ASHUPDATE.LIT 1.0(121) now links to the text update notes (this file) if the difference between the running version and the available-to-update version is less than 1.0 edit.patch units. (In such a case, it is likely that you only want to see the very latest changes, which is much easier to do in this file than in the formatted html document. You can always access the full html development notes from the Help menu.) ============================================================================ A-Shell Release Notes Version 6.0.1243.0 (18 Jan 2012) ============================================================================ 1. --- Update APEX preview control (SftPrintPreview_IX86_A_20.dll) from version 2.0.3.0 to version 2.0.4.0. No feature or behavior changes expected, except for improved compatibility with Windows 8. 2. --- Update XTREE control from version 6.5 (SftPrintPreview_IX86_A_65.dll) to version 7.0 (... _A_70.dll). No feature or behavior changes expected, except for improved compatibility with Windows 8. Note that the _65.dll is no longer used or needed, and may be discarded. ============================================================================ A-Shell Release Notes Version 6.0.1242.5 (18 Jan 2012) ============================================================================ 1. --- Add tracing of the CMDHDR values passed to XCALL SQL. ============================================================================ A-Shell Release Notes Version 6.0.1242.4 (13 Jan 2012) ============================================================================ 1. --- Fix bug in B64ENC (introduced in 1242.2) causing loss or corruption of last byte of an encoded string. The most obvious symptom was that server-based ATE licensing stopped working, but would also have affected MIME attachments sent with EMAILX, and anything else that explicitly used B64ENC. Note that the issue didn't affect ATE directly (only the server side needs updating). ============================================================================ A-Shell Release Notes Version 6.0.1242.3 (11 Jan 2012) ============================================================================ 1. --- Field attribute bug fix (Windows & ATE): The DIM attribute was broken in edit 1242.0. 2. --- Compiler bug fix (edit 502): The :INPUTONLY and :OUTPUTONLY clauses were being tagged as syntax errors (bug introduced in compiler edit 499). 3. --- Compiler refinement (edit 503): PRIVATE MAP statements were generating compiler errors when compiled in an LSX file. 4. --- Compiler bug fix (edit 504): @overlays in structures were generating "illegal modifier with EXTERN" errors when a reference to the structure was declared with the ++EXTERN keyword. 5. --- Security fix: Close a few obscure windows of opportunity for single-byte buffer overruns in various XCALLs. ============================================================================ A-Shell Release Notes Version 6.0.1242.2 (09 Jan 2012) ============================================================================ 1. --- APEX refinement: the reference printer can now be changed from the Print Dialog without printing, by selecting a new printer, clicking Apply, then clicking Cancel. 2. --- Memory corruption cleanup: Eliminate a few opportunities for memory or heap corruption due to bad pointers. ============================================================================ A-Shell Release Notes Version 6.0.1242.1 (08 Jan 2012) ============================================================================ 1. --- INFLD checkbox refinement: Single column checkboxes (no integrated text) now align slightly better with the left edge of ordinary edit boxes. (Previously they were 2-4 pixels to the right.) Also, the focus rectangle is now disabled for checkboxes with no internal text. (Since the focus rectangle only goes around the text, the rectangle was just a smudge when there was no text.) 2. --- Font clipping bug fix: In some combinations of window size and font type, activating the session status bar was resulting in the font descenders being clipped. 3. --- Replace strcpy() operations using overlapping arguments with an internal implementation to eliminate possibility that a modern 64 bit library optimization might not handled it as expected. 4. --- Clean up a few internal pointer issues based on valgrind analysis. 5. --- SQL.SBR refinement: SQLOP_CLOSE_LIB call now frees the libash* shared library. Requires updated library. (1.4.130 for libashmysql). ============================================================================ A-Shell Release Notes Version 6.0.1242.0 (04 Jan 2012) ============================================================================ 1. --- INFLD bug fix/refinement: numeric range checking (TYPE v) was not properly supporting negative or floating point values. Note that the up/down (aka "spinner") control (TYPE ||U) is still limited to integer values. 2. --- SET.LIT 1.2(154) now correctly shows ATE version in SET TERM display. (Previously was showing "ZTERM Build #"). Also, for ATE (6.0.1242.0+) it will show the {NO}FIELDEMU setting used by the ATE client. (Previously it showed the setting on the server side, which gets turned off by ATE, which was confusing some people.) 3. --- Bug fix: When an auxiliary memory partition needed to be allocated for an SBX (because the available free memory in the main partition was less than the minimum SBX memory specified in the MEMORY statement), it was burning a global memory handle. (In unusual cases of repetitive SBX calling from a too-small main memory partition, this could have led to the "out of memory handles" error.) 4. --- TAB(-10,AG_OPTIONS) bug fix: it was failing to support the GOP_FLDEMU bit. ============================================================================ A-Shell Release Notes Version 6.0.1241.9 (28 Dec 2011) ============================================================================ 1. --- APEX bug fix/refinement: The default preview printer was not being reset after changing the printer in the Print Setup dialog unless the document was actually printed. ============================================================================ A-Shell Release Notes Version 6.0.1241.8 (20 Dec 2011) ============================================================================ 1. --- Compiler refinement (edit 500): LSX files created by the /LF switch may now be compiled directly. This can be useful in situations where you need to be able to recompile a program in a different environment, since it encapsulates the entire program and all its ++include modules in a single file. Note that the LSX header shows the compile switches originally used, but you are not forced to recompile with those same switches. Also note that if you use the /LF switch when compiling an LSX file, the new list file will be given a LSY extension. (The two LS? files will be logically equivalent, but may have minor formatting differences.) ============================================================================ A-Shell Release Notes Version 6.0.1241.7 (19 Dec 2011) ============================================================================ 1. --- PDFX Email password encryption refinement: In some cases, encrypted passwords end up with a LF character in the middle, which interferes with the processing of the //PDFX,Email.SMTP.Password directive in the print file. The workaround is to use this alternate format (previously supported only by EMAILX.SBX and now supported by PDFX as well): //PDFX,Email.SMTP.Password,#,#,#,#,#,...# where each # is a decimal value representing one byte of the encrypted password. This format is immune to problems with control characters. As part of the same fix, mode 1 encryption is now supported (previously only mode 2 encryption was supported). See MX_PWCRYPT for details. 2. --- Compiler/language refinement: As an aide to developers looking to use COMPIL /X:2 to take advantage of newer language extensions but being held back by conflicts with new reserved words, the compiler now allows the following previously reserved words (functions) to be used as names of scalar (non array) variables: EDIT, EDIT$ ERRMSG FILL, FILL$ PAD, PAD$ STRIP, STRIP$ XFUNC, XFUNC$ Also, the previously reserved words INPUTONLY and OUTPUTONLY may now be used as variables (scalar or otherwise). Note that while this deviates from the AMOS BasicPLUS compiler's rejection of these keywords as illegal for scalar variable names, the deviation seems harmless and indeed, removes a stumbling block for developers who unknowningly used these words as variable names. AlphaBasic has always distinguished between scalar and array variables with the same name, and since the above system functions use the same syntax as arrays, it seems only logical to distinguish them as well. The change affects only the compiler; it has no effect on RUN files or backwards RUN compatibility. ============================================================================ A-Shell Release Notes Version 6.0.1241.6 (14 Dec 2011) ============================================================================ 1. --- APEX search bug: when searching a file with no page breaks, matches found outside of the currently displayed page were not updating the page display (thus appearing as if the search was "hung"). 2. --- XTREE LDF compatibility bug fix: In environments where the decimal point is defined (in the LDF) as a comma rather than a period, the comma was not being handled properly. 3. --- Windows error reporting bug fix: certain errors trapped by A-Shell independent of the OS, such as file not open or illegal record number, were reporting a bogus OS error (e.g. file already exists) in addition to the correct Basic error. ============================================================================ A-Shell Release Notes Version 6.0.1241.5 (12 Dec 2011) ============================================================================ 1. --- Windows printing bug fix: the overlay file specified by the OVERLAY statement in a printer init file was being left open after printing. ============================================================================ A-Shell Release Notes Version 6.0.1241.4 (11 Dec 2011) ============================================================================ 1. --- AUI_IMAGE bug fix, mainly affecting ATSD/ATE: the client was failing to check for an image with no explicit directory in its local 001004 directory, and was also checking for the image in the server's directory, which could have introduced a delay if that drive letter or folder wasn't accessible to the client. ============================================================================ A-Shell Release Notes Version 6.0.1241.3 (06 Dec 2011) ============================================================================ 1. --- Windows printing bug fix: Changes to printer settings made within the printer dialog box, outside of those directly controlled by A-Shell, were not being respected. Note that even after this patch, you must use PASSTHROUGH=OFF in order to take advantage of many such printer driver features (color quality, watermarks, bindings, etc.) 2. --- Windows printing refinement: The orientation in the printer dialog is now initialized based on the specification in the printer init file or passed in the print request, rather than from the current printer settings. ============================================================================ A-Shell Release Notes Version 6.0.1241.2 (30 Nov 2011) ============================================================================ 1. --- VUE refinement (edit 311): : The typical PC interpretation of the HOME/END keys is now supported via the INI.VUE switch PCNAV = TRUE. (This is more of a new feature than a bug fix, but we'll compromise and call it a 'refinement' in order to sneak it in to the stable 6.0 release.) When enabled, the HOME (^^) and END (^E) keys go to the start and end of the current line, rather than the start and end of the file, as they do in the traditional VUE command set. (This difference has been a long-standing irritation to people accustomed to using typical PC editors.) To go to the start or end of the file when PCNAV=TRUE, the following new extended key commands have been implemented: CTRL+_ HOME (^_^^) start of file CTRL+_ END (^_^E) end of file 2. --- PC special key handling fix: The standard keyboard handler in A-Shell/Windows and ATE now properly distinguishes CTRL+HOME from HOME, CTRL+END from END, CTRL+PGUP from PGUP, CTRL+PGUP from PGUP, and SHIFT-TAB from TAB, allowing them to be separately translated using FIXTRN. Many of the individual GUI controls (which have their own keyboard handlers) already did this, but the standard keyboard handler (mainly used in text mode but also by some GUI controls or contexts) now support them. Note that the MIAME.INI setting OPTIONS=NOAUTOXLT still works as before, but only affects the END, PGUP and PGDN keys and only when not used in conjunction with the CTRL key. The standard release versions of the IFX and VUX files have been updated according to the standards below. Note that although these do get overwritten during an update installation, backup copies of the original files can be found in [997,0] (in case you prefer to keep your customized versions.) Std IFX Std VUX Key Combo Exitcode Translation Translation --------- -------- ----------- ----------- SHIFT+TAB -35 ^G# ^H^H^H^H^H^H^H^H CTRL+PGDN -65 ^GA ^_^E CTRL+PGUP -66 ^GB ^_^^ CTRL+HOME -67 ^GC ^_^^ CTRL_END -68 ^GD ^_^E The VUX translations are meant to allow users accustomed to PC navigation standards to use SHIFT+TAB to back up (8 columns), CTRL+HOME (or CTRL+PGUP) to go to the start of the file, and CTRL+END (or CTRL+PGDN) to go to the end of the file. 3. --- (Linux only) The wyz50 driver has been updated to recognize the above key combinations issued by the EZTERM (2.4.38+) emulator. ============================================================================ A-Shell Release Notes Version 6.0.1241.1 (22 Nov 2011) ============================================================================ 1. --- XTREE refinement: eliminate a 2 second delay in responding to a second double-click selection event in a second tree. 2. --- XTEXT bug fix: editing session was starting out with an invisible caret if the A-Shell caret was visible prior to the call. ============================================================================ A-Shell Release Notes Version 6.0.1241.0 (22 Nov 2011) ============================================================================ 1. --- Further cleanup of issue with ATE clients not being able to save and auto-load their preferred color scheme with applications which don't set their own color scheme. If both the ATE client and server side are at 1241 or above, the client will report its current colors to the server during the license handshake. Assuming the server does not have a LIB:INI.CLR to process, it will then set its own color scheme to match the client. 2. --- MX_WINSETTINGS/ATE bug fix: When no explicit .ash file name is passed to the the load operation (op 3), it was using the server's ash file (in the case of ATSD) rather than the client's. It also now resets the servers's fg and bg colors to match those loaded on the client side. 3. --- COMMON.SBR debugging enhancement: to help trace a reported mystery with COMMON.SBR failure, the TROP_EFS trace flag may now be set to log details of each XCALL COMMON to the ashlog.log file. 4. --- SET.LIT 1.2(153) supports the EFS flag in the SET TRACE operation. Note that the EFS trace flag is normally used for tracing Encrypted File System operations, but because that is not commonly used, the flags is sometimes "overloaded" to activate a debugging trace of temporary interest. ============================================================================ A-Shell Release Notes Version 6.0.1240.9 (17 Nov 2011) ============================================================================ 1. --- Compiler bug fix (compiler edit 498): ++EXTERN statements with initial values were not being flagged as illegal, and in some cases may have actually caused the compiler to crash. It is now correctly reported as an illegal modifier (along with @overlays). 2. --- ATE command lines ending with the -atecfg switch without anything following it (either "?" or the name of a profile) were not being handled gracefully. It is now treated the same as -atecfg ?. 3. --- ATE wasn't saving the current foreground and background colors to the specified .ash file with the MX_WINSETTINGS (or AG_WINSETTINGS) command. 4. --- XTREE editable cell navigation bug fix: When the first editable cell was not on the first row, navigating up from it was putting the tree into navigational limbo. 5. --- XTREE editable mode navigation refinement: left and right arrows keys now work for navigating between editable cells, provided the corresponding InfDef= codes are used. (2 for left arrow, L for right arrow from right edge of field, |L for right arrow from any part of field.) Note that although this behavior may be familiar to INFLD users of those TYPE codes, it is somewhat non-standard for Windows. More standard would be for the left/right arrows to work only within the editable field, and for TAB and SHIFT+TAB (or CTRL+arrows) to be used for inter-cell navigation. ============================================================================ A-Shell Release Notes Version 6.0.1240.8 (15 Nov 2011) ============================================================================ 1. --- PCKLST/XTREE font scaling bug fix: For trees in the main window (not in a dialog), and which did not use the advanced coldef syntax, the default font was failing to taking into account the scaling option in the Misc. dialog. This problem was introduced sometime after 5.1.1205. ============================================================================ A-Shell Release Notes Version 6.0.1240.7 (14 Nov 2011) ============================================================================ 1. --- GDI printing bug fix: The //SETVMI command wasn't calculating the remaining number of lines on the page correctly, leading to bad automatic page breaks. ============================================================================ A-Shell Release Notes Version 6.0.1240.6 (11 Nov 2011) ============================================================================ 1. --- Compiler refinement (edit 497) - The maximum nesting level for ++IFxxx conditionals has been increased from 5 to 13, to match the maximum nesting level for ++INCLUDEs. (Having them be the same makes sense in cases where each include file is wrapped in a ++IFDEF conditional to prevent it from being inappropriately included, although it takes a fair degree of cleverness to reach that many degrees of nesting!) ============================================================================ A-Shell Release Notes Version 6.0.1240.5 (09 Nov 2011) ============================================================================ 1. --- Refinement to color initialization: Even if the INI.CLR file exists, continue to use the colors saved in the .ash file unless the SCNCLR parameter is set to Y (override). Previously it used the SCNCLR values regardless of the override option, and used the global default (fg=6, bg=0) if it was commented out. 2. --- Bug fix: TAB(x) was crashing A-Shell if x < 0. ============================================================================ A-Shell Release Notes Version 6.0.1240.4 (08 Nov 2011) ============================================================================ 1. --- Disable auto_extend for parameters passed in an XCALL to close window of possibility of array being moved after some array elements have been indexed on the stack. See 1236.1 notes for further details of issue (which is the same as for function calls). 2. --- Internal dialog help links now point to the online html documents (allowing us to drop the chm files from the release package). 3. --- Initial color bug fix: although File > Save was saving the current foreground and background colors, and they were being loaded on startup, the saved values were being replaced with the default fg=6, bg=0 if there was no ini.clr to process. Now the saved colors are used as the default. (So if you don't use ini.clr, and your app doesn't explicitly set the colors, you can establish your own starting foreground/background color by just changing them (using SET TERM FCOLOR/BCOLOR, for example) and then using File > Save. ============================================================================ A-Shell Release Notes Version 6.0.1240.3 (07 Nov 2011) ============================================================================ 1. --- Compiler bug fix (edit 495): DIMX structures were generating spurious compile errors when the /CI switch was used. 2. --- Compiler bug fix (edit 496): DIMX structure members were not being offset correctly. (They were all offset by 12+ from the base of the unformatted parent structure variable.) Note that this was a compiler problem, not a runtime problem. Any programs containing DIMX structures should be recompiled, but it is not necessary to update the runtime. 3. --- XTREE bug fix: context menu selections $CBxxx (operations on check boxes) were also exiting back to the application, with a somewhat random exitcode. 4. --- SUBMIT.LIT 3.3(151) now supports unlimited ppns (see 5.1.1221.0.16 below for other commands with the same enhancement) ============================================================================ A-Shell Release Notes Version 6.0.1240.2 (02 Nov 2011) ============================================================================ 1. --- Correct package build problem in AIX release which was resulting in spurious "invalid input" messages, followed by lockup. ============================================================================ A-Shell Release Notes Version 6.0.1240.1 (28 Oct 2011) ============================================================================ 1. --- //XTEXT bug fix: it wasn't respecting the XORIGIN and YORIGIN offsets. ============================================================================ A-Shell Release Notes Version 6.0.1240.0 (27 Oct 2011) ============================================================================ 1. --- Initial release candidate. (No code changes from 5.1.1239.0) ============================================================================ A-Shell Development Notes Version 5.1.1239.0 (23 Oct 2011) ============================================================================ 1. --- New subroutine for generating a hash code from a string of characters: xcall HASH, hashtype, key, cbkey, hash, status hashtype (num) [in] specifies the type of hash to generate. Currently there are only two possibilities: 1=ELF, 2=DJB. ELF is one of the most commonly used hash algorithms in the UNIX world, and is tweaked for 32 bit processors. DJB (named after its creator Dan J. Bernstein) is thought to be one of the most efficient hash algorithms and is thought to work work well on very short keys, but may is considered somewhat weaker then the ELF algorithm (i.e. more likely to generate the same hash from different keys) when it comes to avalanche and permutation. key (S or X) [in] is the source data from which the hash will be calculated. It can be any length. cbkey (num) [in] optionally specifies the number of bytes to be considered in key. If 0, key is processed up to the first null byte or its physical length. hash (s,8+ or b,4) [out] is the generated hash. If string (8+ bytes), then it will be returned as 8 hex digits. If b,4, it will be returned as a 32 bit value. status (signed num) [out] indicates success or failure: >= 0 Success -1 bad key type -2 bad hashtype -3 bad hash data type or size 2. --- Check-for-updates bug fix: if the installer was launched from the Help > Check For Updates menu, at the end it was re-launching the check for updates dialog, rather than the original ATE or A-Shell/Windows session. 3. --- Find local file bug fix: when the file was found in the ASHLPD: directory, in some cases the returned filespec was getting garbled. ============================================================================ A-Shell Development Notes Version 5.1.1238.1 (21 Oct 2011) ============================================================================ 1. --- Move new set-debug-mode menu option (see 1238.0.1) up above the pre-existing Properties option, to minimize confusion for people used to the Properties option being on the bottom. 2. --- XTREE font bug fix: Revise a prior fix (1235.2) which had the side effect of basing some scaled fonts on the Windows dialog font size rather than on the A-Shell window grid size. ============================================================================ A-Shell Development Notes Version 5.1.1238.0 (19 Oct 2011) ============================================================================ 1. --- Debugging enhancement: Debug message window context menu now contains an option to toggle the debug flag (allowing DEBUG.PRINT statements to be activated/deactivated on the fly). 2. --- VUE 3.2(310) supports a new command mode and INI.VUE switch: ASCII7 When set, all characters with the 8th bit set are displayed as low intensity question mark ("?") characters. Even when not set, certain problem characters which appear to AM* and WY* terminals as commands are also handled this way. 3. --- INFLD GUI revision: roll back a change in 1233.0 whereby the ||] type code removed the "client edge" style from edit boxes. The intent of that change was to allow slightly more room for editing the field (reducing the change of a display/truncation problem with narrow fields and wide characters). But the side effect was to make the field taller, which was causing more aesthetic distress than the problem meant to be solved. ============================================================================ A-Shell Development Notes Version 5.1.1237.1 (19 Oct 2011) ============================================================================ 1. --- GUI timing bug fix: Rapid navigation from field to field was causing a loss of focus. (Problem introduced in 1233.2) 2. --- INIX.SBX bug fix: 5.0(512) fixes a problem with an invalid backup file spec if the INI file was opened with an explicit [p,pn] in its file spec. ============================================================================ A-Shell Development Notes Version 5.1.1237.0 (18 Oct 2011) ============================================================================ 1. --- ASHUPDATE.LIT added to package to support Help > Check for Updates. (ASHUPDATE.LIT is actually equivalent to ATEUPDATE.LIT, but acts slightly differently to account for the differences between updating A-Shell/Windows and ATE.) ============================================================================ A-Shell Development Notes Version 5.1.1236.1 (17 Oct 2011) ============================================================================ 1. --- Auto_extend bug fix: Feature was being inadvertently enabled within the calling lists of a function involved in an assignment statement. This was opening a window of possibility by which passing an array element in the argument list beyond the current extent of the array was causing the array to get extended and possibly moved in memory, invalidating the address of any element from the same array already referenced in the same argument list. At best this caused the argument to appear as a bogus value; at worst it caused a segmentation fault.) 2. --- Additional minor improvements in the MALLOC traces. 3. --- Minor improvement to the Windows print auto pitch font trace to help answer questions about the details of the actual font selected. 4. --- INFLD Date/Time Picker refinement: mouse wheel now works for adjusting the individual subfields up and down. ============================================================================ A-Shell Development Notes Version 5.1.1236.0 (13 Oct 2011) ============================================================================ 1. --- GETPRG.SBR enhancement: 4 new optional arguments: XCALL GETPRG, prgnam {,sbxnam {,svr'prgnam {,svr'prgver {,prgdir {,sbxdir}}}}} svr'prgnam (s,10+) [out] applies only to subroutines running in the ATE client context (e.g. launched via AG_XFUNC); it returns the name of the program currently running on the server. Otherwise it will return a null string. svr'prgver (s,13+) [out] also only applies to the ATE client context, returning the version of the program currently running on the server. Example format: 1.2A(345) prgdir (s,18+) [out] returns the device:[p,pn] where the program (prgnam) was loaded from. Example format: DSK22:[123,456]. If the program was loaded directly from memory, it will return a null string. sbxdir (s,18+) [out] same as prgdir, but for the last called SBX. 2. --- Bug fix: OPTIONS=SBX_RUNDIR was always using the explicit location or current ppn (if no explicit location specified in the RUN command) as the RUN location. In a situation where no explicit location was given, and the RUN was in the [p,0] rather than the current [p,pn], it would have subsequently failed to check the [p,0] location for an SBX. 3. --- Bug fix: the SBX auto-reload feature (see 5.1.1221.0 below) was intermittently leading to a spurious subroutine-not-found error when the SBX was not in the current PPN. (The log in this case was showing a failed attempt to load the SBX from the current PPN, instead of from the correct location in [p,0] or BAS:) ============================================================================ A-Shell Development Notes Version 5.1.1235.5 (12 Oct 2011) ============================================================================ 1. --- XGETARG now supports AUTO_EXTEND. (Previously you needed to do a dummy assignment to the array variable prior to the XGETARG in order to trigger the auto extension.) ============================================================================ A-Shell Development Notes Version 5.1.1235.4 (11 Oct 2011) ============================================================================ 1. --- Compiler bug fix/refinement (edit 494): The include'once mechanism now allocates memory as needed to handle any number of files. Previously it maxed out after about 400 distinct include files. 2. --- INFLD checkbox bug fix (for XP): Edit 1220.1 (see below), which gave checkboxes a transparent background, was not compatible with XP and below, leading to dark, opaque backgrounds in some cases. The feature has been disabled for XP and below, restoring the prior behavior. ============================================================================ A-Shell Development Notes Version 5.1.1235.3 (11 Oct 2011) ============================================================================ 1. --- Internal help links (from Settings menu dialogs) now point to the chm file (ashsetup or apex) shipped with A-Shell (rather than the online docs). 2. --- //TEXTRECTANGLE bug fix/enhancement: Now supports limited rotation options (TRF_SINGLELINE with 90, -90, or 180 degree rotation only). Note that the rectangle itself is not rotated, nor is the interpretation of the alignment options (TRF_LEFT, TRF_TOP, etc. remain relative to the rectangle in the standard orientation of the page. Only the text is rotated. See the new sample GDI text file, TEXTRECTR.TXT[908,37] for examples. 3. --- Compiler bug fix/enhancement (edit 491) : PRIVATE DIMX of structure now supported. Previously it generated a syntax error. 4. --- Compiler bug fix/enhancement (edit 492): AUTO_EXTEND now supported with DIMX structures. 5. --- Compiler bug fix/enhancement (edit 493): PUBLIX DIMX was auto-deleting the allocation at the end of the function (severely limiting the utility of the feature). Also, ++EXTERN is no longer required in order to access the DIMX array within the routine in which it is declared PUBLIC. 6. --- Memory allocation system refinement/enhancement: The number of memory handles has been increased from 256 to 384 to support larger/more memory intensive programs. Also, the MALLOC trace has been improved to show the descriptive tag associated with each handle, both in the delete trace and whenever an error causes the entire table to be dumped. ============================================================================ A-Shell Development Notes Version 5.1.1235.2 (04 Oct 2011) ============================================================================ 1. --- XTREE bug fix: re-entry into sorted, file-based trees was landing on the wrong row. 2. --- XTREE bug fix: eliminate seemingly random font changes within the tree, mostly during re-entry. ============================================================================ A-Shell Development Notes Version 5.1.1235.1 (30 Sep 2011) ============================================================================ 1. --- AUI_CONTROL bug fix: clearing a region that partially intersected a TAB panel was clearly the entire panel. Now TAB panels are treated like groupboxes for this operation, i.e., they must fit entirely within the region being cleared in order to be affected. (This restores behavior that was inadvertently changed around 5.1.1211.) 2. --- XTREE bug fix: context menu exits from cell editing were, in some cases, returning exitcode -48 instead of the more specific exitcode assigned to the context menu choice. ============================================================================ A-Shell Development Notes Version 5.1.1235.0 (29 Sep 2011) ============================================================================ 1. --- Language enhancement: DIMX now supports structures directly, for example: DEFSTRUCT ST_MOVIE MAP2 TITLE$,S,30 MAP2 GROSS,F,6 ENDSTRUCT ... DIMX FILMS(COUNT),ST_MOVIE This is effectively the same as: DIMX FILMS(COUNT),X,36 Except that you may also access the individual members using a new form of the traditional array syntax: FILMS(X).TITLE$ ! instead of FILMS.TITLE$(X) FILMS(X).GROSS ! instead of FILMS.GROSS(X) Note that if one of the structure members is itself an array (for example, if we make GROSS into a 2 element array for domestic and foreign gross), the syntax to reference an element of GROSS() array within the FILMS() array would be: FILMS(X).GROSS(Y) The prior workaround (allocating a single instance of the structure, plus an array of unformatted variables equal in size to the structure, and then copying the structure into or out of each unformatted element as needed) is still a viable approach, but the new technique is probably more natural. Maybe even more elegant. Compatibility Warning: this is both a compiler (edit 490) and a runtime enhancement. Programs using it will only run on A-Shell 6.0 and above. (It's being released in 5.1.1235.0 to allow some field testing prior to release, but should be considered a 6.0 feature for production purposes.) Programs that use it will be given the header bit previously used to indicated a minimum requirement of 5.1.1160 (see VERSYS.LIT); that bit will also be re-labeled when 6.0 is released. 2. --- Standalone compiler updated to edit 490 to support the DIMX structures described above. 3. --- MIAMEX, MX_FTFORMAT enhancement: new optional parameters return the file time in the standard system date and time formats used by ODTIM: xcall MIAMEX, MX_FTFORMAT, ftime, strfmt$ {,sdate {,stime}} If specified, sdate (b,4) returns the date corresponding to ftime and stime (num) returns the number of seconds since midnight. Both an be passed to ODTIM for formatting. 4. --- Job table enhancement: program name expanded to support up to 10 characters, and each job now records the version of A-Shell it is running. The layout change does require than any utilities using the job table (including the SYSTAT, SEND, and FORCE commands) should be recompiled and potentially updated. (See below). But, the change is benign enough that it was not necessary to change the header signature and thus doesn't require getting all users out and deleting the job table file before updating. See the updated ASHINC:JOBTBL.MAP and ASHINC:QDEF.BSI files for layout update details. 5. --- SYSTAT 3.1(164) enhancements to support the revised job table layout. - Screen layout adjusted slightly to allow for 10 character program name. (File layout with /L remains as before to preserve compatibility with programs that generate a listing and then parse it.) - New switch /X may be used with /L to force the new layout in the file version. - New switch /V displays the A-Shell version running for each job. (Useful during updates or in situations where the executable may be loaded from different places in order to verify that all users are on same version.) Note that this version of SYSTAT will continue to work with the older job table, but older versions of SYSTAT will not see the program name or A-Shell version for jobs running A-Shell 5.1.1235+ 6. --- SEND.LIT 2.2A(122) - minor adjustment to drop the sending job name from the message (in order to allow more space for the message itself, since part of that space was taken over for the new expanded program name.) ASTAT.LIT 3.1(135) - support new job table layout and 10 character program name. JSTAT.LIT 3.1(107) - " " " ============================================================================ A-Shell Development Notes Version 5.1.1234.0 (23 Sep 2011) ============================================================================ 1. --- ATE enhancement: A Check for Updates option is now automatically added to the Help menu if the OPR:ATEUPDLOC.CFG file is present and specifies a Command= option. 2. --- The HELP buttons in the built-in dialogs associated with the Settings menus now link to the HTML version of the consolidated reference online. 3. --- The print screen option is now added to message boxes only if the print screen function is otherwise enabled (i.e. it shows in the File menu). 4. --- MX_SHELLEX bug fix: The clisvr option was being ignored under ATSD, effectively causing any %env% variables to be translated relative to the server, even when clisvr = "C". ============================================================================ A-Shell Development Notes Version 5.1.1233.0 (12 Sep 2011) ============================================================================ 1. --- AUI_CONTROL enhancement: a new option in the symbolic click string syntax allows for a double-click to send a different exitcode than the single click. To activate, insert a "d" (lower case) after the "VK_x" and before the "F", e.g.: "VK_xdF301" or "VK_xrdF301". In either case, the exitcode sent for the double click with be 1000 times that for the single click. So for the examples just given, the exitcodes would be: left click: -301 right click: 301 (if enabled by "r" code as in VK_xrF301) left double click: -301000 (if enabled by "d" code, as in VK_xdF301) right doubl eclick: 301000 (if enabled by "dr" codes, as in VK_xrdF301) Notes: - Since a double click starts with a single click, you would first get the single click exitcode, then the double click exitcode. (This nasty little fact complicates and limits the practical applications for double clicks, since the control receiving/returning the double click exitcode will most likely be different from the one receiving/returning the single click exitcode.) - When the "d" code to enable the double click is not specified in the click string, the second click in a double click sequence is typically filtered and discarded (to avoid application thrashing when the user accidentally double clicks on a control meant for single clicks only). 2. --- XTREE popup mode (XTF2_POPUP) bug fixes: The scale was reflecting the dialog grid parameters even when the tree was in the main window. And the trees now move along with the parent window. (Previously they acted like typical dialogs, remaining in fixed position even when the parent window moved.) 3. --- XTREE enhancement: new XTR'ITEMLINES special value -2 may be used to shrink the row height to match the largest cell font. (Otherwise, adjustments to the font scale typically don't affect the row spacing.) 4. --- New INFLD TYPE code: ||[ (in conjunction with GUI mode) causes the redisplayed field to grow as needed for the contents. (This was once part of the ||] TYPE code but has been removed in order to avoid slight differences in field display widths which give such screens a ragged look.) ============================================================================ A-Shell Development Notes Version 5.1.1232.0 (07 Sep 2011) ============================================================================ 1. --- IDTIM enhancement: Flag +4 allows the hh value to be greater than 24. Mainly useful for verifying validity of an elapsed number of hours. (The returned internal time will still be just the seconds since the last midnight.) 2. --- INFLD enhancement: TYPE combination "tH" (in that order) is like "t" (time) but allows hh > 24. Not supported in the Windows date control, i.e. not compatible with TYPE "|G" (use "|g" instead). ============================================================================ A-Shell Development Notes Version 5.1.1231.3 (07 Sep 2011) ============================================================================ 1. --- INFLD refinement: trailing blanks are no longer stripped prior to loading the field if TYPE |] used. (This makes it possible to match list items using space as the index character.) 2. --- INFLD bug fix: Don't redisplay t|g fields (GUI time but using regular edit control) as combos. 3. --- All program (RUN/SBX/LIT) load errors are now logged to the ashlog.log file (mainly to improve the prospects for detecting and tracking problems). 4. --- XTREE refinement: XTF2_ANSEQDATA can now be used even when the array contains fields that are not editable, or possibly not even defined. Previously, if the array width didn't match the sum of the widths of the editable columns, the data layout got out of sync with the tree layout. ============================================================================ A-Shell Development Notes Version 5.1.1231.2 (07 Sep 2011) ============================================================================ 1. --- AUI_MENU refinement/bug-fix: The SBX: syntax for MBF_CMDLIN menu items was not working in the case of context menus. (Feature was originally introduced for other menu and control types in 5.1.1130.1) ============================================================================ A-Shell Development Notes Version 5.1.1231.1 (06 Sep 2011) ============================================================================ 1. --- MSGBOX / printscreen refinement: Use the right-click option on the msgbox to print the screen was sometimes resulting in the print screen dialog appearing behind the other windows in the application. ============================================================================ A-Shell Development Notes Version 5.1.1231.0 (02 Sep 2011) ============================================================================ 1. --- MSGBOX enhancement: right-click on the box now reveals a context menu option to print the screen (if the BAS:APRNTSCRN.CFG is configured for print screen.) 2. --- Include Celibec routine EXTRAI.SBR. 3. --- AUI_CONTROL enhancement: new flag MBF2_MINBUTTON (&h00080000) may be used with MBF_SYSMENU to add a minimize button to a modal dialog. Normally, we don't allow a minimize button in this case, because if the dialog is minimized, it may make the parent window appear to be unresponsive. But if you are sure that won't be a problem (perhaps you've made the dialog's parent invisible already), you can force the minimize button option with this flag (in the cflag2 parameter). ============================================================================ A-Shell Development Notes Version 5.1.1230.2 (01 Sep 2011) ============================================================================ 1. --- AUI static control bug fix: a right click on a static control was acting identically to a left click (rendering the "r" in the VK_xrF### click string ineffective). ============================================================================ A-Shell Development Notes Version 5.1.1230.1 (31 Aug 2011) ============================================================================ 1. --- INFLD bug fix: XMIN calculation was under-counting actual field length by 1 when TYPE ] used. (Problem introduced in 1229.1) ============================================================================ A-Shell Development Notes Version 5.1.1230.0 (25 Aug 2011) ============================================================================ 1. --- GDI printing enhancement - new variation of the //TEXTRECTANGLE directive: //TEXTRECTANGLE, left, top, right, bottom, flags, text This variation (identified by the 6 parameters is both simpler to use than the traditional multi-part //TEXTRECTANGLE sequence, but also offers some additional features such as multi-line horizontal and vertical centering. flags may be any sensible combination of the following: TRF_TOP &h00000000 ! top justification TRF_LEFT &h00000000 ! left justification TRF_HCENTER &h00000001 ! horizontal centering TRF_RIGHT &h00000002 ! right justification TRF_VCENTER &h00000004 ! vertical centering TRF_BOTTOM &h00000008 ! bottom justification TRF_WORDBREAK &h00000010 ! wrap the text onto multiple lines TRF_SINGLELINE &h00000020 ! output text as a single line TRF_EXPANDTABS &h00000040 ! expand tabs (8 spaces each) TRF_NOCLIP &h00000100 ! no clipping TRF_EXTERNALLEADING &h00000200 ! incl. ext. leading in spacing TRF_CALCRECT &h00000400 ! calc only (use with MX_GDICALC) TRF_PATH_ELLIPSIS &h00004000 ! path ellipsis TRF_END_ELLIPSIS &h00008000 ! end ellipsis TRF_WORD_ELLIPSIS &h00040000 ! word ellipsis As with other GDI printer directives, the flags can be specified as a decimal value, hex value, or using the symbol names. text may be any string of up to 2048 characters. It may include "^M" symbol(s) to indicate hard CRLF(s). 2. --- MX_GDICALC enhancement - the MXGDI_CALCRECT opcode (3) now supports an optional flags argument which can be used to return the size of the rectangle necessary to print the specified memo text completely (rather than returning the portion of the string that will fit). xcall MX_GDICALC, MXGDI_CALCRECT, handle, status, lft, top, rght, & btm, memo, height, overflow {,flags} flags (num) [in] Formatting options chosen from the TRF_xxx flags used by //TEXTRECTANGLE (see above), with the mandatory inclusion of the TRF_CALCRECT bit. In this case, the rght and btm parameters are also returned, indicating the adjusted rectangle dimensions required for printing the memo string. For single line memos (TRF_SINGLELINE set, or TRF_WORDBREAK not set and no CRLFs in the line), the width of the rectangle will be adjusted to fit the text. Otherwise, if TRF_WORDBREAK is specified, it will preserve the width of the rectangle, breaking the lines as needed to fit within that width, and adjusting the height of the rectangle. ============================================================================ A-Shell Development Notes Version 5.1.1229.4 (25 Aug 2011) ============================================================================ 1. --- MX_GDICALC ATE bug fix: The MXGDI_CALCRECT operation wasn't returning the overflow parameter when run within the ATE context, and the memo parameter was being truncated one character too short. 2. --- MX_GDICALC refinement: The MXGDI_CALCRECT operation now supports a dynamic string (s,0) for the overflow parameter. ============================================================================ A-Shell Development Notes Version 5.1.1229.3 (24 Aug 2011) ============================================================================ 1. --- MX_GDICALC bug fix: The MXGDI_CALCRECT opcode was returning invalid results if multiple MXGDI_SETFONT and MXGDI_CALCRECT operations were performed with a single printer device context (i.e. with a single MXGDI_OPENPTR call). This was particularly noticeable if calling the routine multiple times in a loop with different font sizes to determine the optimum font size needed for a particular string to fit in a specified rectangle. A new test program, GDICALC.BP, has been added to the SOSLIB in [908,37] to illustrate this kind of logic. Note: MXGDI_CALCRECT assumes vertical spacing optimum for the font, i.e. as if a //RESETLPP command had been executed after the //SETFONT. (If you don't do this in the actual GDI print file, the spacing for the print operation may not match that used for the calculations.) ============================================================================ A-Shell Development Notes Version 5.1.1229.2 (23 Aug 2011) ============================================================================ 1. --- INFLD bug fix: |K was treating ^C like Windows copy even when CTRLC was enabled and the V code was not specified. (||K should be used for that behavior - see 1217 below.) The following chart summarizes the behavior of ^C in various situations: CTRLC TYPE TYPE TYPE status V ||K |K Result of ^C ------- ---- ---- ---- ----------------- * V * * exitcode 10 * ||K * copy to clipboard disabled |K copy to clipboard disabled nothing enabled * Basic error 1 * Indicates that the setting doesn't matter, given the other settings on the line. Blank indicates that the TYPE specified TYPE code is NOT set. 2. --- SBXINP.SBX bug fix: 2.3(4) fixes a problem in which a combo box type code string starting with "+" still had additional codes added to it by SBXINP. 3. --- SBXINP.SBX bug fix 2.3(5) fixes a problem in which the CTRLC status became disabled after a call with the "|K" type code. ============================================================================ A-Shell Development Notes Version 5.1.1229.1 (22 Aug 2011) ============================================================================ 1. --- INFLD refinement: when the strip trailing blanks (]) option is specified, don't count them towards xmin. (Previously it was possible to get around the xmin by adding literal spaces.) ============================================================================ A-Shell Development Notes Version 5.1.1229.0 (20 Aug 2011) ============================================================================ 1. --- XTREE enhancement: new flag XTF2_ENTERNAVDOWN (&h00020000) alters the default cell editing navigation response to the ENTER key (provided there is no EnterGoto option defined for the current column.) When specified, instead of acting like TAB and moving to the next editable cell to the right, ENTER acts like the DOWN ARROW, except that from the last row it wraps back up to the top. 2. --- XTREE / ATE bug fix: The "%p" symbol in the TreeID (advanced coldef option) now works as documented. Previously, it got translated to "ATE" when saving the settings, but the saved settings were never found again. 3. --- XTREE / ATE enhancement: If the server version is 5.1.1217 or higher, the "%p" symbol in the TreeID (see previous item) now gets translated to the actual application program name, rather than "ATE". (This was made possible by an enhancement in 5.1.1217 in which the server sends ATE the name of each new program being executed.) ============================================================================ A-Shell Development Notes Version 5.1.1228.4 (19 Aug 2011) ============================================================================ 1. --- ATE/APEX bug fix: Under certain obscure circumstances, a cryptic A-Shell command window (the normally-hidden parent of APEX) was becoming visible, sometimes even on top of the APEX window. APEX still functioned, but it was visually confusing to the user. ============================================================================ A-Shell Development Notes Version 5.1.1228.2-3 (18 Aug 2011) ============================================================================ ============================================================================ A-Shell Development Notes Version 5.1.1228.1 (15 Aug 2011) ============================================================================ 1. --- (UNIX) Clean up some inconsistencies relating to the maximum path length supported by different functions. (All should now support 256.) This also fixed a case of segmentation fault during scanning of directories with really long filenames. 2. --- (APEX bug fix): When trying to print/preview a file that doesn't exist, the error message was incorrectly saying "cannot create a file when it already exists", instead of "file doesn't exist". ============================================================================ A-Shell Development Notes Version 5.1.1228.0 (15 Aug 2011) ============================================================================ 1. --- ATE AUXLOC (emulated auxiliary port printing) protocol enhancement. The server now informs the client of the size of the file being printed, allowing ATE to display a proper progress bar (if either the bottom status or system status lines are visible). This is mainly a benefit when printing files large enough to take more than a couple of seconds to transfer, so that user doesn't wonder if the connection is dead. Note that to get the benefit, both the server and client sides must be updated to 1228, but there is no harm in updating either without the other. 2. --- SBX refresh refinement (see 1221.0.3 below). Whenever an updated SBX is detected, replacing the version in memory, the event is now logged (in ashlog.log). 3. --- Improved handling of "RUN file format bad or incompatible" error: the first time this error occurs, the module is re-loaded from disk. (If if happens again, then the error is reported.) This helps eliminate rare situations where an updated SBX gets loaded before it is full written to disk, or where some other mishap has caused the copy of a program in memory to become corrupted even though the one on disk is good. (Such events are always logged though.) 4. --- ATE status line size fix: The bottom status line text was in some cases too tall to fully fit in the area of the status line provided (for certain Window sizes, resolutions, etc.) 5. --- Minor cleanup of handling of an ATE network disconnect during aux port printing. ============================================================================ A-Shell Development Notes Version 5.1.1227.1 (08 Aug 2011) ============================================================================ 1. --- MX_SHOWWINDOW bug fix: The cid (control ID) parameter wasn't being reset to zero if not specified on the command line, thus resulting in window operations on the wrong control. ============================================================================ A-Shell Development Notes Version 5.1.1227.0 (01 Aug 2011) ============================================================================ 1. --- MSGBOX refinement: If external window events cause a shift of focus from the message box to the main A-Shell window, A-Shell now puts the focus back on to the message box. Previously, it was sometimes possible to have the message box visible and on top of the main window, but without the keyboard focus. 2. --- HOST.LIT 2.0(104) is now smarter about sorting out possible confusion between switches and UNIX filespecs (both of which can contain slashes). This allows unquoted commands, such as: .HOST /s/abcd to continue to be treated as filespecs, as they were before the switches /S and /O were added in 2.0(103). Note that the preferred way to prevent UNIX filespecs or commands from being confused with switches is to enclose them in quotes. For example: .HOST /s "/s/abcd" In the above command line, the /s following HOST will be treated as a switch, while the "/s/abcd" will be treated as a command to execute. 3. --- HOST.LIT 2.0(105) expands the maximum size of the buffer available to capture the output of the command from 64K to 256K and now appends a truncation warning message to it if the buffer fills up. 4. --- DO.LIT / MDO.LIT 2.1(124) and SUBMIT.LIT 3.1(150) now support a new kind of command line argument, ++fspec, which get replaced by the first line of the corresponding file. For example, if the file MYDATA:C.TXT starts with "THIS DATA", then the DO file command line: DOTEST A B ++MYDATA:C.TXT would expand to: DOTEST A B (The are employed when the line contains embedded spaces so that the entire line is treated as a single DO file or SUBMIT argument.) 5. --- ATE auto-update improvements: When an ATE workstation connects to a server, the server scans the %MIAME%/atesetup directory looking for ATE install packages newer than the ATE version running on the client. Now, in addition to looking for monolithic install packages named: ate-#.#.#.#*.exe it also looks for: ate-#.#.#.#*-web.exe ate-#.#.#.#*-web.txt The -web.exe files are assumed to be small, web-based, granular update packages, which compare your current version to the one associated with the update package, pulling down from the Internet just the modules that need updating. This style of update package is dramatically faster to transfer from the host to the client and start executing (due to a size different of about 200KB vs 18MB), and often faster to complete since often only a few modules require updating. However, they do require that the client have Internet access. The -web.txt files are tiny text files containing just the URL of the the -web.exe module on the Internet. This version eliminates any need for a file transfer from the application server to the client prior to starting the update, as it merely commands the client to download the granular web installation package directly from the web. (This approach is particularly attractive in conjunction with a Windows application server and 5.0 clients, where large file transfers from the Windows server to the client didn't always work very well.) In heterogeneous environments, you may want to use more than one type of update package. The original, monolithic (single-file) update modules are best with UNIX servers and LANs, particularly if the connection from the application server to the workstation has better throughput than the connection from the workstation to the Internet. But in WAN environments, and also with Windows servers (where the server-to-client file transfer may be slow or problematic), the -web.txt or -web.exe version may be best. (An advantage of the -web.exe version is that the update procedure can be launched directly from the server after it transfers the file; with the -web.txt version, the installer gets downloaded from the Internet via the user's browser, which may require that the user click a button to save the file and then manually launch it when the download completes). If there is more than one kind of update available, A-Shell will select the newest -web.exe or -web.txt version, unless it is able to determine that the client does not have internet access. (Prior to ATE 5.1.1139, the server could not tell, so it assumes that the client does have Internet access.) The -web.exe and -web.txt updates are given equal weighting; whichever one has the latest version will be used. ============================================================================ A-Shell Development Notes Version 5.1.1226.2 (30 Jul 2011) ============================================================================ 1. --- XTREE bug fix: Advanced coldef option FastMax=1 was acting like FastMax=2. ============================================================================ A-Shell Development Notes Version 5.1.1226.1 (26 Jul 2011) ============================================================================ 1. --- ATE licensing refinement: Adjust server/client license handshaking to work around a complication that arises in certain non-USA versions of Windows. (The problem wasn't serious but led to an incorrect warning about a problem in the license, and an unnecessary invocation of the LICENS/ATESRV command on startup.) ============================================================================ A-Shell Development Notes Version 5.1.1226.0 (26 Jul 2011) ============================================================================ 1. --- MX_GETSHELLPATH enhancement: add option to operate relative to the server or the client: xcall MIAMEX, MX_GETSHELLPATH, csidl, folder {,clisvr} where clisvr (S,1) [in] may be set to "S" (for server), or "L" (for local, which is the same as server in this context); anything else is treated as meaning "client". The option only has significance in the ATSD environment where the possibility exists of performing the function relative to the ATSD server or the client. In all other cases, the parameter is ignored and the operation is performed relative to the client, or returns an empty string if an applicable client is not present. 2. --- MX_CHKPCNET enhancement: add option to operate relative to the server or the client: xcall MIAMEX, MX_CHKPCNET, status, flags {,clisvr} Where clisvr is exactly as for MX_GETSHELLPATH above. 3. --- MK_SHELLEX enhancement: add option to operate relative to the server or the client: xcall MIAMEX, MX_SHELLEX, status, objectspec, action, parms, dir, & showflags, waitflags, clisvr (all params after objectspec are optional). The clisvr parameter is exactly as for MX_GETSHELLPATH and MX_CHKPCNET above. 4. --- MX_MKDIR refinement: the remoteflag parameter can now also accept "C" (for client) as an alias to "R" (remote) and "S" (server) as an alias to "L" (local). This is intended to reduce the chance of accidentially using the Client/Server notation in place of the Remote/Local notation. (Experience has shown that some people are confused over which is the "Remote" and which is the "Local", which is why we've moved towards the Client/Server notation, which seems less easy to confuse.) 5. --- XTREE checkbox bug fix: T and T+ (editable checkbox) cells stopped working in 5.1.1225.0. ============================================================================ A-Shell Development Notes Version 5.1.1225.0 (25 Jul 2011) ============================================================================ 1. --- Status line display enhancement: accented characters are now supported. Previously, the 8th bit was used for attribute information, which caused accented characters to generate garbage. 2. --- XTREE enhancement: Left arrow from a child row now jumps to the parent (provided XTF_LEFT is not set, or @@ is used to override it). Conversely, right arrow from a parent row whose children are already expanded jumps to the first child (provided XTF_RIGHT not set or @@ is used). (With this, plus the expand/contract on left/right feature added in 1220.0, XTREE now matches the handling of the arrow keys in the Windows registry editor.) 3. --- INFLD enhancement: new TYPE code ||E causes ENTER to return exitcode 23 instead of the normal 0. This can be useful in certain dialog situations (particularly involving AUI_EVENTWAIT) where either the correct response to ENTER, or the meaning of a response of exitcode 0, might otherwise be ambiguous. 4. --- XTREE change/enhancement: New coldef cformat code "tt" acts like "t" (non-editable checkbox), but instead of always displaying in dim intensity, instead uses the same formula based on the value of the cell as with editable checkboxes. In other words, by default, "tt" checkboxes display in normal intensity; to force individual checkboxes to display as dim, add +4 to the cell value. ============================================================================ A-Shell Development Notes Version 5.1.1224.1 (21 Jul 2011) ============================================================================ 1. --- XTREE bug fix: In editable, variable height with a selection style using one of the gradiant options, the height of the rows was being adjusted slightly when switching between edit and selection mode. Besides being slightly annoying, it was confusing the logic that identifies the clicked-on cell, such that in some cases the edit operation would end up being activated for the cell above the one that was actually clicked. 2. --- ATE status line / aux port printing bug fix: The default text mode for the status lines was switching from fixed pitch to proportional pitch after an auxiliary port printing operation, unless an explicit AG_STATUSLINES command had been issued previously, or a GUI control had been created. (This actually followed the rule in which the default mode is changed to proportional if a GUI control is created prior to any explicit AG_STATUSLINES command, but it seemed like a bug because the GUI control in this case was the progress bar created automatically during the aux printing operation.) ============================================================================ A-Shell Development Notes Version 5.1.1224.0 (18 Jul 2011) ============================================================================ 1. --- Combo box enhancement (applies to INFLD and XTREE selection-only combos): Replace the the standard Windows single-character keyboard matching algorithm with a multi-character version, allowing direct keyboard selection of items from within combos which share one or more starting characters. Previously, the matching logic reset for each new character, making it impossible to select by anything other than the first character of the item. Now the matching logic resets after a delay of 1 second, or after a failed match or a special key (such as arrows, etc.) 2. --- Directory processing fix: Clear up some remaining problems with processing filespecs within directories containing periods. (In particular, COMPIL was failing to rename the OBJ file to RUN on completion.) 3. --- UNIX log file fix: Clear up a race condition relating to logging messages to the ashlog file. 4. --- Mouse wheel enhancements: New MIAME.INI command (OPTIONS=NOWHEEL) disables the otherwise automatic conversion of the mousewheel events into up/down arrow keypresses when the focus is not on a control that captures the mousewheel directly (such as XTREE, multi-line INFLD, etc.) The default behavior allows you to use the mouse wheel to scroll within certain environments that are otherwise text-only (like VUE). But in some cases the default behavior is undesirable, for example: a) On laptops with sensitive mousepads, you may get spurious cursor motion just from brushing your palm against it (very annoying in VUE). b) In screen contexts where there may be a mixture of controls that scroll (like XTREE) and those that don't (like a single line INFLD), users may attempt to use the mousewheel with the intent to scroll an object like XTREE, when in fact the focus is on a control like INFLD where the conversion of the mouse wheel to an up/down arrow maj trigger unwanted exitcodes (3 & 5), leading to further confusion. Note that VUE supports its own version of this switch (in the INI.VUE and command mode): MOUSEPOS . Previously it defaulted to ON (mouse wheel enabled), and was always re-enabled on exit. With this update, it defaults to OFF if OPTIONS=NOWHEEL is set in the miame.ini, and in any case, VUE always restores the original global setting on exit. Also, the mousewheel is now disabled in INFLD self-combo fields (which exit on the first down arrow key); otherwise it is too easy to end up with several additional down arrow key events which would then be interpreted according to logic impossible for the user to predict. Self-combos within XTREE continue to operate as before. 5. --- Directory scanning fix: Close a loophole (introduced in 1219) which led to an accumulation of open file handles during directory scanning operations (e.g. DIR []). The effects generally went without notice, although at some point it was possible that directory scanning stopped working, and even that programs and commands would begin to fail with Out-of-memory or too-many-files errors. 6. --- XCALL AMOS bug fix: When the pflag parameter was passed, and the routine launched a new process to execute the command, the child session was executing in silent mode, making it impossible to run an interactive program. ============================================================================ A-Shell Development Notes Version 5.1.1223.0 (14 Jul 2011) ============================================================================ 1. --- Compiler (edit 487)/language semantic change (could be considered an enhancement or a fix, but does change existing behavior): RESUME ENDFUNCTION (and RESUME ENDPROCEDURE) statements now ignore any explicit $EXIT label. Previously, if there was an explicit $EXIT label defined within the procedure, the RESUME would have resumed at the $EXIT label, and executed any code from there to the actual end of the routine. The new behavior is more natural and safer, since it eliminates the possibility of an infinite error trapping loop (if an error occurred in the code after the $EXIT label). Note that this also affects how untrapped errors within functions and procedures are handled. Previously, the code following an $EXIT label would have been executed before the error status and execution was returned to the caller. If you really to want to execute the code after an explicit $EXIT label upon resuming from the error, you can specify it explicitly in the RESUME statement: RESUME $EXIT Note, however, that the WITH_ERROR clause is only allowed in conjunction with RESUME ENDFUNCTION / ENDPROCEDURE. 2. --- INFLD enhancement: new TYPE code ||u may be used with the D, d, t, and YN codes to ignore the current LDF settings and just use the (American) defaults. Without this, the LDF format was used (even in the absence of the "u" code). 3. --- ATE bug fix: In some cases of a dropped connection, ATE was displaying the "connection reset" message box twice. ============================================================================ A-Shell Development Notes Version 5.1.1222.4 (13 Jul 2011) ============================================================================ 1. --- INFLD date format bug: u was setting the U flag, which was causing DD/MM/YY format even for D fields when the LDF specified MM/DD/YY. Note that contrary to the documentation, the u code is effectively implied for the D and d types, and has no effect on the U field (which forces European date format regardless of the LDF). So in other words, u has no effect on date fields. 2. --- Compiler (edit 486) bug fix: use of the $EXIT label (see 5.1.1192, compiler edit 462) was eventually leading to an "Aux. label buffer overflow" error within the compiler (after a certain number of $EXIT labels). ============================================================================ A-Shell Development Notes Version 5.1.1222.3 (12 Jul 2011) ============================================================================ 1. --- INFLD date format bug fix: Contrary to the documentation, the D and d codes were being subjected to the LDF format (u is supposed to be required for that to happen). Also, u was being treated like U (forcing European format). 2. --- INFLD date format refinement: the u code now applies to U as well as D and d (forcing the use of the date format specified in the LDF). Previously, U was immune from the u code. Also, it no longer matters whether the u comes before or after the D or d code. 3. --- MX_GETOFD refinement: the maximum length of the file (file.ext) parameter parameter has been increased from about 80 to 256. Note that in the ATE environment, updating the server side only will only increase the limit to about 90; you'll need to update both sides to go beyond that. Also note that this relates only to the file name and extension, not the path (so it is fairly rare that 80 wouldn't be more than long enough). 4. --- FTPDLX bug fix: ports > 32767 were generating an error 6 (overflow). Fix is in FTPDLXcall2.dll 5.1.206 (which may need to be re-registered using regsvr32, if you have multiple copies installed in different places.) ============================================================================ A-Shell Development Notes Version 5.1.1222.2 (07 Jul 2011) ============================================================================ 1. --- HOSTEX.SBR bug fix (ATE environment): Launching an interactive program, such as a shell, via HOSTEX, was often starting with the keyboard in local mode. 2. --- HOST.LIT 2.0(103) now supports a help display (HOST /?) and two new options: Usage: .HOST {{switches} cmd {modifier}} Switches: /S display exit status of cmd /O captures the stdout of the cmd and displays it from within A-Shell (The optional modifiers are same as can be used with HOSTEX.SBR) Also, in the case of ATE, the keyboard is reset to normal mode (another way of working around the HOSTEX problem described above.) ============================================================================ A-Shell Development Notes Version 5.1.1222.1 (05 Jul 2011) ============================================================================ 1. --- HOSTEX.SBR bug fix (Windows): The returned status now reflects the actual exit status of the launched application under Windows (matching the way it has long worked under UNIX). Previously (for Windows) it only reported -1 for failure-to-launch and 0 otherwise. Note that the exit status is only valid when the parent is forced to wait for the launched command to terminate. 2. --- AUI_CONTROL bug fix: CTLOP_CLR and TCRT 10 were not clearing dim static text controls when protect mode (TCRT 13) was not active. (It was always acting as if protect mode was active.) 3. --- ISAM-A bug fix: Filespecs longer than 15 characters were being truncated in allocate'indexed operation (most typically via ISMUTL). ============================================================================ A-Shell Development Notes Version 5.1.1222.0 (27 Jun 2011) ============================================================================ 1. --- PCKLST enhancement: XTF2_DOWN flag is now supported (triggers exitcode -43 when DOWN or CTRL+DOWN used from bottom row). 2. --- AUI_IMAGE enhancement: Automatic transfer of server-side image files (opcodes IMGOP_LOAD, IMGOP_DISPLAY and IMGOP_LOADDISP) is now supported under ATSD. (Previously it was only supported with UNIX servers.) Note if the filespec has a backslash in it (i.e. appears to be a Windows native filespec), AUI_IMAGE assumes the filespec is relative to the client and doesn't try to transfer it. The IMGF_FORCEXFER flag can be used to force the filespec to be interpreted as belong to the server, and to transfer the file to the client for display. (If the file doesn't exist on the server, AUI_IMAGE will send the display command to the ATE client anyway, in case the client already has a copy of it.) 3. --- AUI_IMAGE enhancement: The automatic file transfer of images from the server to the client is now smart enough to check if an identical copy of the file already exists on the client (either in the specified directory or either of the cache directories or in the %MIAME%\icons directory). If so, the redundant transfer is skipped. 4. --- MX_FILESTATS enhancement: A new loc'rem parameter value ("C", for client/cache) checks for the file on the local client computer, including looking in the cache and other default local directories. In the case of ATE, this is similar to the "R" (remote) option except that if the file is not found in the specified directory, a search will be made of the other directories that ATE normally checks when trying to open files at the behest of the server (%ATECACHE%, %ATEPERMCACHE%, %MIAME%\icon, and possibly others). In the case of local A-Shell/Windows, this is like the "L" (local) option, except that it also checks the above-mentioned directories. (The cache directory environment variables will typically not be defined for A-Shell/Windows, and thus will be ignored, but the %MIAME%\icons subdirectory and perhaps others may still be valid and searched.) See AG_FILESTATS below if you want to retrieve the actual filespec of the found file. 5. --- AG_FILESTATS enhancement: An optional flags parameter is now supported: ? tab(-10,AG_FILESTATS);fspec{,versiz{,hashsiz{,flags}}};chr(127); The flags parameter may contain one or more of the following: &h0001 Check for fspec in ATE cache directories if not found otherwise &h0002 Returned client native spec of located file The syntax of the return string has been expanded to: bytes, mtime, ctime, mode {,ver {,hash {,pcspec}}} The ver and hash strings are limited in length by the versiz and hashsiz parameters. 6. --- AUI_IMAGE status code correction: if the platform does not support image display (e.g. A-Shell/UNIX with an emulator besides ATE), the return status code is now 24. (Previously it was returning 20, which is properly reserved for another error.) ============================================================================ A-Shell Development Notes Version 5.1.1221.0 (23 Jun 2011) ============================================================================ 1. --- File hooks enhancement: new flag HFF_DATA_CHG_ONLY (&h00020000) may be used in conjunction with HFE_POST_WRITE to suppress calling the hook function after the write if the record data hasn't changed. The new flag is defined in the updated ASHINC:HOOK.DEF The SOSLIB hook test program FHOOKTST1.BP[908,50] and sample hook routine FHOOK1.BP[908,50] have been been updated to test/demo new flag. 2. --- File hooks bug fix: The recsiz field in the hook envelope structure was previously 0. It is now set to the record size specified in the open statement. 3. --- SBX calling enhancement: When an SBX is called, A-Shell now checks to see if the version available on disk is newer than the one in memory, and if so, automatically reloads it from disk. To reduce the overhead of this check to a negligible amout, the test is never performed more often than once per 15 seconds for any single SBX. In other words, within 15 seconds of copying a new version of an SBX into the search path, all calls to the SBX will begin using the new version. Previously, any job that had recently called the SBX prior to the update would most likely have continued to use the old version which was cached in user memory. This ranged from a minor inconvenience (perhaps requiring all users to log out of A-Shell in order to ensure that an updated SBX would take effect right away), to frustration, confusion and wasted time (when thinking that an updated SBX was in use when some users were still running an older version from memory). Note that the test is not "directional", i.e. it will reload the version on disk if there is any difference in the time stamp (newer or older), so you can roll back to a prior version the same way you update to a newer version. WARNING: The search path used to compare the disk version to the memory version is identical to that used to actually load the routine from disk, i.e. first [p,pn], then [p,0] (or the RUN file location, if SBR=SBX_RUNDIR), and finally BAS:. If you intend to roll out a new version of the SBX and take advantage of the feature, make sure that your new version appears before any older versions in the search path. (And if, for some hard-to-imagine reason, you don't want users to immediately being using an updated SBX, don't copy it into the search path.) 4. --- PCKLST (text mode) now supports the XTROP_DELETE operation to clear the screen area used by the list. Note, however, that the screen colors will be set according to what is "current", so you may want to use an explicit TAB(-2,x) and TAB(-3,x) prior to deleting the list. (Or just delete it with some form of PRINT statement.) See the next item for the option to save/restore the screen area involved. 5. --- New PCKLST flag XTF2_SAVRES (&h8000) causes PCKLST to save the screen area unless the XTROP_DELETE opcode is used, in which case it causes PCKLST to restore the area previously saved. Note that PCKLST will automatically save and restore the area of a pop-up, without using this flag, provided that the XTF_MODELESS flag is not set. If XTF_MODELESS is set, then you can set the XTF2_SAVRES flag (in 2nd 4-byte flag word, i.e. flag2) in the first call to create the list display, and again in the final XTROP_DELETE call to remove it. The flag currently does not affect XTREE (GUI mode), which does something like this automatically already. 6. --- XTREE refinement: SHIFT+RIGHT within an editable text cell now marks text rather than advancing to the next cell. (CTRL+RIGHT advances.) 7. --- PCKLST enhancement: XTREE-style title justification ("| ","< ","> ") codes are now supported for the top title. 8. --- New language feature: INPUTONLY and OUTPUTONLY qualifiers may now be appended to function and procedure parameter definitions to clarify their intended usage. The qualifier must immediately follow the parameter size or structure type, with a colon in between, e.g.: FUNCTION FN'TEST(P1 AS S20:INPUTONLY, P2 AS ST_PHONE:OUTPUTONLY) The INPUTONLY clause serves primarily as an aid to self-documenting code, but will also cause the compiler to generate an error if you explicitly reference the parameter in an XPUTARG statement (using a literal param #). (There is no run-time aspect of this feature, so you won't be stopped from outputting to the parameter using a variable to specify the parameter number in the XPUTARG statement.) The OUTPUTONLY clause also aids in self-documenting your code, but in addition it skips the input parameter binding operation (which, for very large parameters could save a lot of CPU cycles). 9. --- MSGBOX fix: The enhanced detection of CTRL+C (see 5.1.1211.0.7 below) was interfering with the normal use of MSGBOX immediately after processing a CTRLC+C keyboard sequence (whether as an abort command, copy to clipboard, or some other operation). If the time lapsed between the original CTRLC+C and the XCALL MSGBOX was too short, MSGBOX was still detecting the CTRLC+C and treating it as a request to abort. 10. --- ATE refinement: The "Kbd Lock" menu item on the Settings menu has now been split into two items: "Kbd Lock" and "Kbd Local". The former now relates only to the traditional keyboard lock (set with TAB(-1,7), cleared with TAB(-1,8)), while the "Kbd Local" checked menu indicates if ATE will transmit keyboard characters directly to the host, or queue them up locally (to be consumed by local processes, such as GUI controls operating on the client). Previously, the single "Kbd Lock" menu item applied to both, which was sometimes confusing. 11. --- MX_OSVER enhancement: The osname parameter will now be returned with "/64" appended to the end when running a 64 bit Windows OS. 12. --- XTREE/PCKLST enhancement: new flag XTF2_POPUP causes the tree control to be created as a popup rather than as a child control. This is mainly useful when creating an XTREE in the main window (rather than in a dialog) that may overlap other controls, and where you want those other controls to remain visible. Normally, XTREE will save and then remove any overlapping controls when it is displayed in a main window, because otherwise those controls may "bleed" through (interfering with the visual and operation aspects of the XTREE control). The feature was added primarily to improve compatibility with the text mode of PCKLST when it is used to create multiple overlapping "pick lists". That always worked fine in text mode; now it works fine in GUI mode as well. The flag is defined in XTREE.DEF as: define XTF2_POPUP = &h00010000 ! implement as popup rather than child Note that the new mode constrains some of the more advanced behaviors of XTREE, so it should probably only be used in simple "pick lists" (as you have when XTREE is called by PCKLST). In particular, popup mode is incompatible with editable tree mode. 13. --- New ATE command AG_IATIMEOUT (79) to retrieve or set the inactivity timeout period. Same idea as MX_IATIMEOUT but for the Windows or ATE client. tab(-10,AG_IATIMEOUT);opcode;",";timesecs;chr(127); opcode should be "1" to set the timeout, and "0" to retrieve it (in seconds). (Since the default opcode is "0" and the timesecs argument is ignored in the case of the retrieve operation, both arguments can be eliminated when retrieving the timeout.) timesecs is the new timeout value in seconds. (Note that this differs IATIMEOUT parameter in the system INI file, which uses units of minutes.) Retrieve: ? tab(-10,AG_IATIMEOUT);chr(127); input "",timeout'seconds Set: ? tab(-10,AG_TIMEOUT);"1,";timeout'seconds;chr(127); Comments: Also see IATIMEOUT in the system INI file and MX_TIMEOUT. Note that in the case of ATE, if the server-side timeout expires, the job will receive error 254, whereas if the client-side timeout expires, the job will experience this as a hangup (error 250). See the section on Job Terminations in the Development Guide for more details on how hangups are handled. 14. --- (Windows/ATE) Inactivity detection improvement: mouse activity is now treated as activity (i.e. clears the inactivity timer). Previously only keystrokes and Basic program instruction execution counted. 15. --- New AUI_CONTROL ctype2 flag MBF2_NOMOVE (&h00040000) prevents a dialog from being moved. This does not interfere with the ability to minimize, maximize or resize the dialog, which are controlled by other options (MBF_MODELESS, MBF_MAXBUTTON, and MBF2_RESIZE, respectively). 16. --- LIT command enhancement: remove the limit on the number of PPNs allowed per device, affecting the following commands: COPY.LIT 3.3(134) DIR.LIT 3.3(149) ERASE.LIT 3.3(120) PPN.LIT 3.3(112) RENAME.LIT 3.3(112) SYSACT.LIT 3.3(106) (The major.minor versions of all of the above were updated to 3.3 to make it easy to recognize these versions.) ============================================================================ A-Shell Development Notes Version 5.1.1220.2 (08 Jun 2011) ============================================================================ 1. --- Compiler fix: DIMX arrays defined within functions and procedures with the AUTO'EXTERN option enabled were mistaking the arrays' local scope for global, causing the compiler to complain, for example, about a duplicate variable if a local DIMX array had the same name as a global one. Note that the fix just affects the spurious compilation error; the hash code of the RUN file (of programs which previously compiled without error) will not change after recompilation. ============================================================================ A-Shell Development Notes Version 5.1.1220.1 (07 Jun 2011) ============================================================================ 1. --- New pseudo RGB symbol RGB_TRANSPARENT (&h02020202) may be specified with static and checkbox/radiobutton controls to create a transparent background, providing an alternate method for making those controls blend into non-standard window background colors. 2. --- INFLD refinement: checkboxes and radiobuttons now automatically use the transparent background feature (described above), UNLESS the OBCLR field of the INFCLR parameter is >= 0. ============================================================================ A-Shell Development Notes Version 5.1.1220.0 (06 Jun 2011) ============================================================================ 1. --- MX_SHOWWINDOW / AG_SHOWWINDOW enhancement: new opcode -3 (SW_QRYPIX) is like -1 (SW_QUERY) but returns the coordinates of the target window or control in pixel units, rather than "universal units". New symbols have been defined (in ASHELL.DEF) for the 3 query opcodes to make them more self-explanatory: SW_QRYCTLUNV -1 (Query control in Universal Units; same as SW_QUERY) SW_QRYMONPIX -2 (Query monitors in Univ. Units; same as SW_QRYMON) SW_QRYCTLPIX -3 (Same as SW_QRYCTLUNV but returns coords in pixels) 2. --- XTREE enhancement: In multi-level trees, the left and right arrow keys now act like the +/- keys (to expand/contract levels), provided there is no conflict with those keys, i.e. provided none of the XTF_EDITABLE, XTF_LEFT or XTF_RIGHT flags is set. You can also force the new left/right behavior even when such conflicts exist by using the new compound cformat code "@@" (instead of "@"). Although this may be an "enhancement" of only microscopic proportion, it does permit rapid navigation in multi-level trees without have to lift one's figures from the cursor control keys. 3. --- PCKLST enhancement: The text-mode implementation is now "tolerant" of the XTREE format of the COLDEF (aka PROMPT) parameter, provided that the XTF_COLDFX (&h040000) bit is set in the flags parameter. It doesn't actually respond to any of the XTREE-only options (cformat codes, etc.), but it now does support the cwidth and ctitle values for the first column and interprets the contents of the array parameter accordingly. Previously, PCKLST (text mode) required that the actual array width matched the window width and treated the PROMPT parameter as a title string. This is another case of a minor enhancement, but it allows programs using XTREE/PCKLST for basic single-column lists to take advantage of some advanced XTREE features when in GUI mode, without completely breaking the the text mode operation. It also opens the door for the possibility of supporting some of the simpler Advanced Coldef options (such as SelChgExit) in PCKLST/text mode. 4. --- PCKLST enhancement: The XTF_NOSEL flag bit is now supported (to display a list without waiting for a selection to be made). 5. --- PCKLST enhancement: The SelChgExit=### advanced coldef option is now supported. 6. --- PCKLST enhancement: The RFCLR and RBCLR fields in the MMOCLR structure (previously reserved for a ruler but never implemented) will now be used (if either is not -1) to redisplay the selection bar on exit from menu mode. This is intended to allow a way to simulate the way XTREE typically displays the selection bar in light gray when the tree is not active. 7. --- INFLD multi-line bug fix: Unless one of the fixed-pitch font options was specified (||F or ||f), the font height was being expanded to fit the height of the control. (Made sense for single-line inputs, but not for multi-line.) Problem was introduced in 5.1.1200. 8. --- ATE / OpenSSH bug: The TERM environment variable on the server was being set in all upper case (e.g. AM75G instead of am75g). This was only an issue if you were working outside the A-Shell environment. ============================================================================= A-Shell Development Notes Version 5.1.1219.3 (06 Jun 2011) ============================================================================ 1. --- Calendar bug fix: if the container dialog was smaller than the calendar, it was displaying just a sliver of it, rather than just clipping it to the size of the container. Bug was introduced in edit 1212. 2. --- Control centering bug fix: MBST_HCENTER and MBST_VCENTER options were centering (and clipping) based on the coordinates requested rather than the actual control size. (This mainly only affected controls with immutable sizes, such as the calendar control.) 3. --- Directory scanning bug fix/enhancement: MX_FINDFIRST/MX_FINDNEXT/MX_FINDEND sequences can now be nested. Previously, MX_FINDFIRST effectively executed an implicit MX_FINDEND to terminate the previous sequence, which could have led to a crash or other error if the interrupted sequence was then continued. Although the documentation has always clearly stated that only one directory scan sequence can be in progress at the same time, the situation can arise in event-driven contexts, or within nested routines, where it is not possible for the local context to be aware of a scan in progress by the calling context, or vice versa. Nesting thus eliminates a cause of hard-to-debug application or system errors. 4. --- Dialog sizing bug fix: Creating a dialog of a specified client size in pixels using MBF_DIALOG+MBF_ALTPOS and MBF2_PIXSIZE (see 1176.0) wasn't working in a variety of situations. 5. --- XTEXT bug fix: correct a problem introduced in 1218 in which it reported to the user that 0 lines would be saved when not applicable (i.e. when in display mode, etc.) ============================================================================ A-Shell Development Notes Version 5.1.1219.2 (27 May 2011) ============================================================================ 1. --- Further refinements to the "ink saver" algorithm: - Fix a problem with white text on a dark background disappearing - Fix problems with large white areas on a dark background turning dark - Apply a gamma lightening adjustment to the final result ============================================================================ A-Shell Development Notes Version 5.1.1219.1 (27 May 2011) ============================================================================ 1. --- AUI_IMAGE improvement: The "Ink Saver" (IMGCF_INKSAVER) algorithm (see 1215.0.7 below) has been improved to optimize the single color responsible for the most ink, rather than simply the single color occupying the most screen area. This results in better overall optimization in screens where the most common color is already very light, but there is still a substantial area of a much darker color. ============================================================================ A-Shell Development Notes Version 5.1.1219.0 (26 May 2011) ============================================================================ 1. --- ATE/ATSD licensing counting adjustment: ATSD now identifies instances with the machine ID reported by the ATE client during the initial handshake, rather than with the ID generated by the server. This makes the names listed in the SYSTAT/C display more meaningful, and should mostly eliminate the discrepancy between the way sessions were counted against the license between P2P and ATE connections to the same server. 2. --- ERRMSG.xxx message file fix: a few of the standard messages (particularly warning messages relating to the license count) were displaying some garbage in the ashlog.log due to spurious "%" characters in the message files (which have now been updated). 3. --- LOG file improvement: certain fatal error messages (like "you've been zapped!") were only appearing on the screen; these are now being logged (mainly of interest for follow-up support/review.) 4. --- XCALL/Function parameter improvement: the maximum number of parameters which can be passed to an XCALL (SBR/SBX) or Function/Procedure has been increased from 100 to 128. If you need more than that, perhaps a redesign of the routine's interface may be in order. (Although we've said that before, and here we are, increasing it again!) ============================================================================ A-Shell Development Notes Version 5.1.1218.0 (24 May 2011) ============================================================================ 1. --- XTEXT enhancement: a new field, TXC'MAXROWS, has been added to the TXTCTL structure (see XTEXT.MAP and XTEXT.SDF) to support an optional row count limit. If specified, a warning dialog will display when the limit is exceeded (as soon as it happens, periodically, and on exit). Text of dialog can be customized via SBRMSG.xxx 023,002 and 023,003. 2. --- XTEXT enhancement: new txc'docfmt'xxx flags relating to ATE: TXFF_RAWBUF (&h0400) TXFF_XFER (&h0800) TXFF_RAWBUF may be set in the txc'docfmt'src field to cause the source file to be transferred to the ATE client via the ATE auxport transfer protocol, rather than via FTP. (This is the default mode for ATSD, where FTP is typically not available but it may be set explicitly for UNIX applications. When txc'docfmt'dst is a buffer (i.e. TXFF_FILE flag is not specified), then TXFF_RAWBUF may be set in the txc'docfmt'dst field to cause the return buffer to be sent directly (via the stdin channel) rather than via FTP. In both cases, the TXFF_RAWBUF method is faster, provided the amount of text is less than about 4K. (FTP starts out slower due to the need to establish a new connection, but eventually catches up due to windowing and other flow maximization techniques.) Note that the TXFF_RAWBUF bit should only be used in the txc'docfmt'dst field for files that cannot contain binary data (such as embedded objects). TXFF_XFER may be specified in the source format field (txc'docfmt'src) to force XTEXT to interpret the source file as being local to the server and requiring transfer to the client. Without this flag, the PC filespecs (containing backslashes) will be assumed to be visible directly to the client and thus not requiring file transfer. (This mainly a concern with ATSD where both the server and client environments are Windows.) ============================================================================ A-Shell Development Notes Version 5.1.1217.4 (23 May 2011) ============================================================================ 1. --- INPUT CSV refinement: the auto-detection of the delimiter character (see 1215.0.13 below) now chooses the most common delimiter character (outside of quotes) on the entire first line, rather than settling for the first delimiter it finds. 2. --- XTEXT refinement: The context menu Paste option now recognizes the existence of a bitmap on the clipboard (if the destination format supports it). Previously it only recognized the availability of text to paste. ============================================================================ A-Shell Development Notes Version 5.1.1217.2 (19 May 2011) ============================================================================ 1. --- Bug fix: MX_MAPI was not handling multiple attachments very well, and was sometimes generating a spurious error -7 even with one attachment. 2. --- Bug fix: MX_ABOUT called within a locally-licensed ATE instance was generating a spurious file open error dialog. (Mainly noticed in the print screen routine.) 3. --- Bug fix: When an INFLD call was interrupted by another SBX (launched from the menu, such as the print screen utility), certain attributes of the current field (type, tooltip) were getting corrupted on return. 4. --- ATE refinement: When connecting to an ATSD server, the login name and password fields may now be used, either together or individually, along with the additional login text. Previously, it was mainly only reliable to enter all of the login information in the additional text box (which defeating the password masking feature, at least in the config dialog). ============================================================================ A-Shell Development Notes Version 5.1.1217.0 (18 May 2011) ============================================================================ 1. --- Server now notifies ATE of current program and version (used by the print screen utility.) 2. --- The print screen interface has been re-engineered to eliminate the need to launch it in a separate instance (making it leaner and cleaner). 3. --- IMPORTANT BUG FIX: 5.1.1209.6 broke the automatic cleanup of local DIMX variables, causing another memory handle to be used up on execution of a DIMX within a function or procedure. (This easily led to an out-of-memory handles or out-of-memory error.) 4. --- INFLD bug fix: pasting from clipboard into a combo box was causing flaky results, including locking up the field. 5. --- INFLD new type code: ||K acts just like |K (Windows keyboard conventions) but also disables the CTRLC abort while the field is active. This allows you to use ^C for copy-to-clipboard without first having to disable the CTRLC abort in the application. 6. --- INFLD improvement: The standard keyboard commands for selecting characters (^A, shift+arrows, shift+home/end) now work in combo boxes. 7. --- License display bug fix: In some cases the display of license options (mainly under UNIX) was containing garbage characters in place of an unset option. 8. --- MX_MAPI bug fix: The routine was aborting with a spurious error -7 (file not found) in cases where only one attached file was specified. ============================================================================ A-Shell Development Notes Version 5.1.1216.1 (15 May 2011) ============================================================================ 1. --- XTREE bug fix: Tooltips we're becoming corrupted if the memory space allocated for the had to be moved as it was expanded. 2. --- Print screen bug fix: The print screen dialog was corrupting the current INFLD context. To eliminate interactions between the print screen dialog and the current program, the calling mechanism has been changed to launch a separate instance. (Requires APRNTSCRN.SBX 1.0(105) update to support new calling arguments.) ============================================================================ A-Shell Development Notes Version 5.1.1216.0 (14 May 2011) ============================================================================ 1. --- AUI_IMAGE new opcode: IMGOP_SAVEAS (11) may be used to convert one image type to another: XCALL AUI, AUI_IMAGE,IMGOP_SAVEAS, handle, status, fspec, comp The arguments and operation are nearly identical to IMGOP_CAPTURE, except that the source of the operation is a previously loaded image specified by the handle parameter. The image is saved to the specified fspec, converting it (according to the extension of fspec) and the compression and other options in the comp parameter. For example, you could use this opcode to load a 24 bit color BMP and save it as an 8 bit grayscale PNG with the "Ink Saver" transformation. In fact, the print screen utility (APRNTSCRN.SBX) now uses this technique to process changes in the image attributes (which is faster than taking a new screen picture). 2. --- AUI_IMAGE bug fix: IMGOP_CAPTURE now works when the window being captured is on a secondary monitor. Previously it only worked on the primary monitor (and was otherwise returning a spurious error code). Note however, that for WINID=-1 (screen), it still only returns the primary monitor screen. 3. --- AUI_IMAGE bug fix: Opcodes 1 and 5 were failing to recognize the filespec. 4. --- New MIAMEX function MX_CSVDELIM (181) allows the CSV delimiter to be set or retrieved: XCALL MIAMEX, MX_CSVDELIM, op, delim$ where: op (num) [in] is the opcode (0=get, 1=set) delim$ (s,1) [in/out] is the delimiter retrieved (opcode 0) or to be set (opcode 1) When set, the specified delimiter overrides delimiter normally used by the WRITECD, WRITETD, and INPUT CSV statements. 5. --- WRITECD/WRITETD refinement: In addition to supporting the new custom CSV delimiter (see above), it now quotes any field that contains any of the the "likely" delimiter characters (comma, tab, semicolon, colon), the custom delimiter character (if applicable), or any of the "problem" characters (quote and apostrophe). 6. --- Print screen bug fixes and enhancements (APRNTSCRN.SBX 1.0(103)): - The header and footer in landscape mode were intersecting - Changes to the image attributes are now shown immediately - The refresh button was moved to the Image Source groupbox to make it more obvious that it needs to be clicked to re-take the image after change the source options. - If the SaveDir directory is in \Program Files\, it is moved to the user's My Directory folder (to eliminate privilege violations and directory virtualization confusion.) - The dialog is now slightly smaller and appears centered on the current monitor (eliminating a problem with the buttons being off the screen). It also displays on top of everything else, making it much harder to cover up and forget about (which effectively locks up the session). - An email button has been added. Thanks to Steve Evans for pointing out several of these issues during testing! 7. --- SBXINP.SBX 2.3(3) update refines ^C handling, eliminating a situation where ^C was causing "an explosion". ============================================================================ A-Shell Development Notes Version 5.1.1215.0 (12 May 2011) ============================================================================ 1. --- (ATE) New version of ASHNET2.DLL (2.0.202) replaces the previous implementation of the OpenSSH protocol, adding support for client-initiated keepalive (more about that below), as well as fixing a number of internal issues, including the fact that the previous version crashed when executing the UNIX "su" command. The new version also supports an abort option dialog while waiting for the connection. (This allows you to cancel the operation instead of having to wait for it to time out.) This variation of SSH is now the preferred one in all cases. To activate it, check the "OpenSSH" box in the ATE configuration dialog Transport panel. To confirm that you are using it, the About box now indicates whether you are using ASHNET or ASHNET2 and the version. Compatibility note: The new ASHNET2.DLL requires ASHW32.EXE edit 1215 or higher. (It will complain otherwise.) The old ASHNET2.DLL will work with newer or older copies of ASHW32.EXE, but is no longer recommended. Background Note: Originally, the only SSH option supported by ATE was the "TUNNEL", based on a proprietary COM implementation of SSH in wodTunnel.dll. That option continues to work well, but suffers from the complexities and other disadvantages of a tunnel vs. a direct SSH transport. In 5.1.1148, we added a direct SSH option, based on another proprietary SSH library which was packaged into ASHNET.DLL. That option also works fairly well, but is known to drop the connection in response to certain communication errors, for which we've been unable to find any solution. This led to the introduction of another direct SSH option, this one based on the open source OpenSSH project, and packaged in ASHNET2.DLL. It seemed to solve the problem of the spurious dropped connections, but was missing a KeepAlive option and crashed when executing the UNIX "su" command. Since this new implementation solves both those problems, unless we discover something unexpected in the course of field testing, we'll probably drop the previous direct SSH option entirely. 2. --- (ATE) - Add a keepalive option to the configuration dialog (ATECFX 4.0.145). 3. --- (Windows) New MX_SCRNPIC option, SPICF_GUICSV (&h0100), dumps the current GUI control table to .CSV. The intent is to make it possible for developers who are using GUI-enhanced text (e.g. TPRINT, DPRINT, INFLD) to extract the information about the resulting text and edit controls and combine it with the text-based screen dump information to create an "enhanced text" screen picture. The details of how to do that have been left to the individual developer. The layout of the CSV data is similar to that of the "Dump Control Info to Spreadsheet" function, but simplified and improved somewhat by adding the explit font information. The columns headers should help identify the data. 4. --- XSTRIP.SBR added to the standard release (after fixing some bugs introduced in 5.1 during translation of the original proprietary version written by John Pruitt.) The subroutine performs various string editing operations: Syntax: xcall XSTRIP, strarg or: xcall XSTRIP, strng, filter, opcode strarg (string, 2+ bytes) [in/out] is the string to be operated on. filter (string, 1+ bytes) [in] contains filter info, depending on opcode. opcode (num) [in] defines the operation. In the first syntax, the routine is equivalent to XCALL STRIP (removes trailing blanks). opcode 1: All occurrences of any of the individual characters in the filter are removed from strarg. opcode 2: All occurrences of characters NOT in filter are removed from strarg. opcode 3: Remove words. filter contains a comma-separated list of words to be removed from strarg. Double spaces resulting from the removal of a word are shortened to a single space. Example: strarg = "THIS IS A TEST OF THIS XCALL ROUTINE" filter = "THIS,TEST,ROUTINE" XCALL XSTRIP,strarg,filter,3 Result: strarg = " IS A OF XCALL " opcode 4: Remove matching characters from start of string. Example: strarg = "THIS IS A TEST TO SEE WHAT IS HAPPENING." filter = "SIHT " XCALL XSTRIP,strarg,filter,4 Result: strarg = "A TEST TO SEE WHAT IS HAPPENING." Note: The removal process was terminated at the first character of strarg for which there was no match in filter ("A"). opcode 5: Remove matching characters from the end of the string. Same concept as opcode 4 but starts at the end of strarg and works backwards. opcode 6: Pair-wise character substitution. filter must contain an even number of characters, interpreted as pairs. Each occurrence in strarg of the first character in each pair (of filter) is replaced with the second character of the pair. Example: XCALL XSTRIP,strarg,"A1B2",6 ! replace all "A" with "1"; "B" with "2" opcode 7: Reduce multiple spaces to single spaces. filter not used. E.g: XCALL XSTRIP,strarg,"",7 5. --- New command AGCMD.LIT may be used to send a TAB(-10,AG_xxx) command from the dot prompt or within a command file (without having to write code and compile it). Useful for experimentation and for inserting simple ATE or other GUI configuration commands in startup command files. Usage: .AGCMD{/switches} is the symbolic AG_xxx name (case insensitive, with or without the AG_ prefix), or numeric value of the AG command to execute. is the remainder of the parameter list as it would be passed in the TAB(-10,AG_xxx) statement, except without the trailing chr(127). Switches: /K# Assign result to CMD/DO variable $KBD# /S Silent (don't display the command response) /N No wait (don't wait for any response) /W:# Wait # seconds for response (overriding default) Examples: AGCMD WINEXEC,$DEL %ATE%\dsk0\001004\ftpdlx.log AGCMD WINTITLE,This is the new and improved title AGCMD SHOWWINDOW 3 AGCMD STATUSLINES,1,0 AGCMD/S 24,cmd.exe,option,"/c ipconfig > ipcfg.lst",,0,1 AGCMD/N PALETTE,3,0,123,207,242 AGCMD/S/K1 BROWSEFOLDER Note: If neither of the /N or /W:# switches are specified, AGCMD will use the "normal" wait value based on the command itself, ranging from no wait (for commands with no response, e.g. AG_STATUSLINES), to a few seconds (for commands with an immediate response, e.g. AG_GETENV), to unlimited (for commands which require a user response, e.g. AG_WINPTR). Some commands, however, have a variable response (or lack of), depending on the command parameters. For example, AG_PALETTE has no response when used to set a color, but has a "standard wait time" response when used to retrieve palette info. For these commands, AGCMD defaults to the "standard wait time" (a few seconds). To avoid waiting for a response that won't be coming, use the /N switch (as in the example above). 6. --- New command ECHO.LIT functions similarly to the UNIX and Windows echo command. It offers similar functionality to the CMD/DO file ":< ... >" mechanism, but is more flexible and powerful, supporting the full range of special special $ variables (which otherwise only work within DO files) and environment variables (e.g. %MIAME%) .ECHO Your job name is $NJ .ECHO The MIAME directory is %MIAME% .AGCMD/K0/S BROWSEFOLDER .ECHO You selected folder $KBD0 7. --- (Windows, ATE) AUI_IMAGE new opcode IMGOP_CAPTURE (10) captures the screen or a window to a file: Syntax: XCALL AUI, AUI_IMAGE,IMGOP_CAPTURE, handle, status, fspec, comp, winid The concept is similar to that for IMGOP_ACQUIRE, except that the source of the image is the screen/monitor rather than a scanner. The parameter sequence and interpretation is also nearly identical to IMGOP_CAPTURE. The main exception is the last parameter (which in IMGOP_CAPTURE specifies the title to put on the scan dialog). Here it identifies the screen option to capture: winid (string) [in] - Indicates the image source: -2 = current A-Shell window or modal dialog (if applicable) -1 = entire screen (primary monitor only) 0 = main A-Shell window 0### = arbitrary window or control handle ### ### = id of the AUI control to capture name = name of the AUI control to capture Note that the -2 and 0 options capture the target window/dlg and anything above it. The comp parameter supports some additional flags (which are not applicable to IMGOP_CAPTURE): IMGCF_CLIENT (&h00080000) Capture just the client area of the target window. (Else incl. window border, titlebar, menu, etc.) IMGCF_GRAY (&h00100000) Convert captured image to grayscale (All of the following imply grayscale...) IMGCF_BI_SCATTER (&h00200000) Convert to bi-level using scatter method IMGCF_BI_DITHER (&h00400000) Convert to bi-level using dither method IMGCF_BI_THRESH (&h00800000) Convert to bi-level using threshold method IMGCF_NEGATE (&h01000000) Negative image (useful with black window bg) IMGCF_INKSAVER (&h02000000) Save ink by converting most common color to white* *The "inksaver" option attempts to address the common complaint about graphic screen images using up too much printer ink or toner. It analyzes the image to identify the most common pixel value, which is most likely the window or dialog background color. It then converts that color to white (requiring no ink). Any pixels that were originally white are changed to a light-gray so as to not completely disappear into the background. 8. --- (Windows, ATE) AUI_IMAGE now supports saving to PNG format (in the acquire and capture operations). The comp parameter indicates one of the following compression filtering options: PNGF_ALL 0 Use best filter for each row (best compression) PNGF_NONE 2 No filter (fastest) PNGF_SUB 4 Difference filter with adjacent pixel PNGF_UP 6 Difference filter with previous row PNGF_AVG 8 Average filter PNGF_PAETH 10 Paeth filter You can add the following to any of the above PNGF_INTERLACE +1 Save as interlaced file 9. --- (Windows, ATE) Add a configurable "Print Screen" option to the File menu. Although the option is customizable (and easily removed), we decided to define a default behavior and place on the menu to reduce the confusion that has historically surrounded the print screen function. The behavior of the option is determined by a configuration file, BAS:APRNTSCRN.CFG, which should be formatted as follows: ; [MENU] Command=SBX:APRNTSCRN A default APRNTSCRN.CFG configuration file (formatted as above) is included in the installation/update packages, but will not overwrite an existing copy. (So once you modify your configuration, it will stay put.) The APRNTSCRN.SBX file (and its source, APRNTSCRN.BP) will be supplied (and overwritten) during installation/update. So if you want to modify the default print screen behavior, you should supply your own SBX and plug its name into the Command= line of the APRNTSCRN.CFG file. To remove the item from menu, just comment out (or remove) the Command= line from the APRNTSCRN.CFG file. To accomplish this for many ATE clients in one step, you can use ATSYNC.LIT in a startup command file to update the individual copies of APRNTSCRN.CFG from the server. Or, even simpler, just send a command to delete the APRNTSCRN.CFG file, e.g. ? TAB(-10,AG_WINEXEC);"$DEL %MIAME%\DSK0\007006\APRTNSCRN.CFG";chr(127); or, using the AGCMD.EXE: .AGCMD WINEXEC $DEL %MIAME%\DSK0\007006\APRNTSCRN.CFG As an alternative to calling an SBX to perform the print screen function, you can specify an arbitrary Windows command line (removing the "SBX:"), e.g.: [MENU] Command=super-print-screen.exe -arg1 -arg2 -arg3 Note that the APRNTSCRN.CFG file is only processed by the menu subsystem the first time you click on the menu bar. So removing it or changing the Command= line after the menu has already been accessed will have no further effect until you close and relaunch the session. 10. --- AUI_MENU bug fix: When specifying the parent menu by name (rather than position) in the menuid parameter, it was failing to match equivalent names that differed only by the presence or position of "&". For example, "File" was not matching "&File". Also, a menuid of "" was matching the first submenu (typically "File"), instead of the overall top menu. In some cases these anomalies didn't affect the overall result, but in some cases they caused it to fail. 11. --- AUI_MENU refinements: When deleting a built-in menu, you can now set the menuid parameter to "" and put either the string representation of the internal menu id # in the mnutxt parameter, or the numeric value in the itemid parameter (in which case set mnutxt=""). (The latter method apparently seems more natural to some users, whose efforts were previously failing.) TAB(-10,AG_MENU) supports simplified deletion of menu items using either of the following formats: TAB(-10,AG_MENU);"3,,";str(IDM_PRINTS);chr(127); TAB(-10,AG_MENU);"3,";MENUID$;",";MNUTXT$;chr(127); The first example works for internal (built-in) menu items, where you must specify the str() of the IDM_xxx value for the menu (from ashell.def). The second example works for custom menu items, where you specify the text of the parent menu and the text of the item to delete. These formats are mainly useful with AGCMD.LIT, since they don't apply to AUI_MENU. They are faster than any other method for deleting individual items one at a time, since there is no return status. 12. --- DEL.LIT 2.2(108) bug fix: Memory modules longer than 8.3 were not being deleted due to truncation of an internal variable. 13. --- INPUT CSV enhancement: It now detects colon and semicolon delimiters in addition to the comma and tab delimiters previously detected. Also, the detection logic is activated only on the first line of the file; after that, it will remember and re-use the delimiter for the remainder of that file. (This eliminates the possibility that the detected delimiter might change at some point in the file due to an ambiguously formatted line.) ============================================================================ A-Shell Development Notes Version 5.1.1214.0 (28 Apr 2011) ============================================================================ 1. --- The A-Shell/Windows status line configuration is now saved and restored with the .ash file. 2. --- Status line bug fix: When the top status line was disabled, the proportional font used on the bottom status line became almost microscopic (1 pixel high). 3. --- AG_STATUSLINES enhancement: two new stslin options allow save and restore of the status line configuration: ? tab(-10,AG_STATUSLINES);"stslin,visible,textmode";chr(127); When stslin=4, the visibility/configuration of all status lines is saved. When stslin=5, the previously saved configuration is restored. 4. --- VUE 3.2(307) uses the new AG_STATUSLINES feature (above) to save the present status line configuration and then enable the bottom status line (which is used by VUE to display important information during editing). On exit, the previous status configuration is restored. 5. --- New SBR=AUTO_DLG_MAX option (in the MIAME.INI) causes AUI_CONTROL to automatically maximize any newly created dialog which is larger than the screen size (for single monitor systems). The intent is to help existing dialogs conform better to netbook and tablet environments whose screens are smaller than the dialogs were originally designed for. (Maximizing in this case actually reduces the size of the dialog, and scales all the controls within it accordingly.) If the dialog is small enough to fit, but is partially off the screen, it is shifted so as to be entirely visible. ============================================================================ A-Shell Development Notes Version 5.1.1213.1 (27 Apr 2011) ============================================================================ 1. --- About dialog refinements: For ATE, it now clarifies that the version it is displaying at the top of the About box applies to ATE (A-Shell on the client) not to A-Shell on the server (although the latter version continues to also show in the lower part of the box). It also indicates which ashnet library is being used, when applicable. In all cases, the license options have been made somewhat more uniform and consistent with those used when issueing license codes and those displayed by ABOUT.LIT. Note: There remain some "license options" which appear in the "about" display but are not chargeable and/or not associated with the PIC. These include LFS (Large File Support), W32IO (a variation of the file i/o library), VI(x.x.x) (Victor Imaging library version), and possibly others. 2. --- ATSD/ATE refinement: The window title set by ATE (typically "ATE Connection to ") is no longer overwritten by "A-Shell/32 Ver. x.x.xxx.x" on connection to an ATSD server. This was further confusing people who run both A-Shell P2P and ATE connections to the same server. 3. --- Windows resource leak bug fix: The proportional text status line handler was leaking Windows resources, leading to an eventual meltdown condition in which the A-Shell controls would cease to display properly. ============================================================================ A-Shell Development Notes Version 5.1.1213.0 (21 Apr 2011) ============================================================================ 1. --- ATE refinement: option to display "session status bar" added to configuration dialog. (Session status bar shows the session clock and progress indicator during host-client transfers.) 2. --- ATE refinement: option to close window on disconnect added to configuration dialog. Previously, and by default, this was always true, meaning that the ATE window closed when the session disconnected. When false, a message box will announce the disconnect (except when initiated from the client side), allowing you to see the last state of the application display when the disconnect occurred. 3. --- XTREE bug fix: Using the Dspwid option with an editable cell to limit the width of the edit box (primarily of interest with property sheet mode where an excessively wide column width may confuse the operator during editing) was having the side effect of always triggering the validation exit (-48) even if the field not changed during editing. 4. --- XTREE enhancement: Dspwid now works with combo box cells in property sheet mode to limit the width of the combo box. Note that the width specified includes the dropdown button, so you may need to adjust it upwards. 5. --- A-Shell/Windows bug fix: Close a loophole that could have caused A-Shell to lock up on startup. The problem was introduced in 1202, and occurred during logging of the startup trace message. 6. --- XTREE refinement: cformat codes M (multi-line) and W (wrap) now work in property sheet mode. But warning: specifying either code for any "column" effectively turns the feature on for all the "columns", since the option is only controllable at the display column level, and in property sheet mode, there is only one display column. 7. --- UNIX log file bug fix: Close a loophole allowing recursive log events (which can lead to stack overflow and crash). Also, protect rollover operation against multiple processes performing the rollover at the same time (which can lead to a gap in the seqeuence of log file archives and possibly a spurious error message during race conditions.) (Note: A-Shell/ Windows has had this fix since edit 1202.) ============================================================================ A-Shell Development Notes Version 5.1.1212.1 (12 Apr 2011) ============================================================================ 1. --- SET.LIT 1.2(152) now shows the "Sys bg", "Win bg", and "Win text" color settings (in the "SET TERMINAL" display) for ATE as well as A-Shell/Windows. 2. --- AUI_IMAGE/ATE (server side) bug fix: Opcodes 7 and 8 (acquire and select source) were timing out after 7.5 seconds. (Should be unlimited for these operations.) 3. --- Terminal input bug fix: An input string consisting of just a doublequote character was causing A-Shell to lock up. Also, and unmatched opening quote was being stripped from the input. (Should be stripped only if matched.) 4. --- Aux port printing refinement: the "printing..." status message now appears on the window status line (if visible), rather than the bottom status. ============================================================================ A-Shell Development Notes Version 5.1.1212.0 (8 Apr 2011) ============================================================================ 1. --- AUI_CONTROL enhancement: the month calendar control now supports multiple calendars in a single control (i.e. multiple months showing at a time). Because it is difficult to know how big the control coordinates must be in order to display a specific number of calendars, you may now replace the lower right coordinate (erow,ecol) with the number of rows and columns, respectively, of calendars to display, provided that the MBF2_PIXSIZE flag is specified in the ctype2 parameter. For example, srow=1, scol=50, erow=1, ecol=2 will create a control with two calendars side by size, starting at position 1,50. (If the two calendars would extend off the edge of the parent window, the starting coordinates will be adjusted so that the entire calendar fits in the window.) Note that the day states feature (MCS_DAYSTATES) is not compatible with multiple calendars. The MONCAL test program in [908,42] of the SOSLIB has been enhanced to illustrate the new technique. 2. --- Status line enhancement: The top and bottom status lines can now be displayed using a proportional font, as an alternative to the traditional fixed pitch font. To configure this option, the AG_STATUSLINES command has been enhanced: ? tab(-10,AG_STATUSLINES);stslin; ","; visible; ","; textmode; chr(127); Where: stslin = 1 (top), 2 (bottom), 3 (system) visible = 0 (invisible), 1 (visible) or "" (no change) textmode = 0 (fixed pitch), 1 (proportional) The default textmode is 0, but automatically switches to 1 if any GUI controls are created before an explicit AG_STATUSLINES command is issued. (The assumption here is that if you are using GUI text or other controls in the window, you would probably want the status line text to also use that mode.) Once you issue an AG_STATUSLINES command, the mode stays fixed (until another AG_STATUSLINES command changes it). Note that the number of characters allowed on the status line does not change between modes, even though typically proportional text is more compact. Also, the proportional text is tokenized (similar to the way the OPTIONS=GUI_SPC_IND feature works) so that any text tokens preceded by two or more spaces will be repositioned to start in the same position as it would have in fixed pitch mode. ============================================================================ A-Shell Development Notes Version 5.1.1211.2 (7 Apr 2011) ============================================================================ 1. --- APEX bug fix: Printers with descriptive device names longer than 32 characters were not getting properly saved as the default selection for the print dialog, causing the default to revert back to the first available printer. 2. --- APEX refinement: When the printer dialog from within APEX is used to change printers, APEX now switches to the newly selected printer (to use as the basis for preview). Previously the preview stuck with the original printer, which may have confused people (particularly if the characteristics of the two printers were different enough to affect the preview). 3. --- MX_NXTLIN bug fix: When used with CMD/DO files containing CRLF line terminators under UNIX, the returned lines were including a trailing CR character, which may have confused some programs. As an example, IF.LIT was falsely reporting an inability to find the matching ENDIF for an IF statement. ============================================================================ A-Shell Development Notes Version 5.1.1211.1 (6 Apr 2011) ============================================================================ 1. --- Revise the status line revision (see 1211.0) to go back to using the standard black on gray Windows colors used previously (rather than using a slightly lighter or darker variation of the main screen colors). 2. --- Month calendar bug fix: Date selection under Windows 7 was crashing A-Shell for calendars using the WM_POPUP window style. (This is evidently rare - calendars are usually implemented a child windows.) ============================================================================ A-Shell Development Notes Version 5.1.1211.0 (4 Apr 2011) ============================================================================ 1. --- Status lines revision/enhancement: The style of the top and bottom status lines (A-Shell/Windows and ATE) has been revised slightly to take up less space (by removing the beveling and leading). Also, the color scheme has been changed to be a slightly lighter (or darker) variation of the screen colors (at the time of the last clear screen operation), rather than the black-on-gray scheme used previously. At the same time, a new system status line option has been added (intended to display status information originating from or relating to A-Shell rather than to the application.) New menus options have been added to the Settings menu to enable/disable all three status lines. 2. --- ATE printing refinement: The LP TRACE flag on the server side is now forwarded to the ATE client during AUXLOC printing, making it easier to trace ATE printing issues. 3. --- Windows default printer tracing improvements: The steps involved in saving and restoring the default printer (used for previewing and for setting the initial default when displaying the printer selection dialog) are now traced (if the LP trace flag is set); this includes any errors (such as privilege violations preventing the settings from being stored in the registry). 4. --- ATSD/APEX refinement: the APEX preview switch is now ignored (with an appropriate warning message displayed) when printing direct from a Windows server ATSD connection. (APEX is not possible when printing from a remote server.) Previously, the switch confused the situation and resulted in no print out and no warning message. 5. --- ATSYNC 1.0(109) now complains about unrecognized switches, clarifying a confusing situation that previously occurred when an unquoted native directory spec was given (containing slashes, e.g. ATSYNC /vm/miame). The syntax help also now clarifies the need to quote such native specs. 6. --- MSGBOX.SBR enhancement: A new variation, MBTN_CANCEL_TRY_CONTINUE (6) produces the buttons "Cancel", "Try Again", and "Continue", and returns two new status values MBRC_TRYAGAIN (10) and MBRC_CONTINUE (11). This is actually just an alternate style to the older ABORT/RETRY/IGNORE message box (with ABORT being replaced by CANCEL, RETRY being replaced by TRY AGAIN, and IGNORE being replaced by CONTINUE). The new variation has been used in Windows since W2000, in preference to the older style. Actually, no change to MSGBOX was necessary to support this new style - it was just a matter of defining symbols for the new codes in ashell.def. The only internal change is that if you specify the new style but are not running in GUI mode, it continues to display in the old style, while behaving compatibly with the new style. 7. --- MSGBOX.SBR now checks if the CTRL and C keys are down, both on entrance and exit. If so, and CTRLC is enabled for the job, error 1 is triggered. Otherwise, it returns the new return status code 12 (MBRC_CTRLC). This should help alleviate a frustrating situation where a program was putting up error message boxes too fast to allow the ^C keyboard status to be detected between the MSGBOX calls (and CTRL+C is not recognized as an abort by the standard Windows message box itself). 8. --- Minor fix to confusion in the error message that appears when you try to launch a command line which contains "%" characters (typically from unresolved %ENV% variables). The "%" characters are interpreted as variable placeholders by the log message formatting routine, which was leading to the message showing a strange command line that didn't match the original. 9. --- Close a GPF window of opportunity in the AUI_CONTROL CTLOP_RSA opcode. 10. --- AUI_CONTROL bug fix: MBF_CMDLIN flag (which after all, isn't very distinctive with a value of 0) wasn't being handled properly when the CMD arg for the control contained a "%" (as in %ENV%) or a "ù" (i.e. chr(250)). 11. --- ATE bug fix processing MDF file (for menu customization) - menu items containing references to ATE-generated environment variables (such as %ATEPERMCACHE%) were being garbled. Environment variable expansion for menu items is now delayed until the menu is selected, rather than defined. 12. --- ISAM 7 statements (get next key and return it) now support dynamic variables. They do not, however, support auto-extension of arrays. So if you want to use an auto-extend array variable, you must first initialize each element, eg: DIMX IKEY(1),S,0,AUTO_EXTEND ... ! load ISAM keys into an auto-extending array of dynamic elements DO WHILE ERF(CH)=0 I = I + 1 IKEY(I) = "" ! must initialize element to get auto-extension! ISAM #CH, 7, IKEY(I) LOOP 13. --- MSBOXX.SBR enhancement: new flag BOX_PAR (&h00100000) may be used with BOX_WIN and BOX_SVA/BOX_RSA to automatically make the pop-up panel act as the parent to any controls (including TPRINT statements) created until the box is removed (with BOX_RSA+BOX_WIN+BOX_PAR). You could have done this yourself using MX_AUTOPARENT except that MSBOXX does not return an identifier for the panel; the BOX_PAR option overcomes that issue and automatically issues the necessary MX_AUTOPARENT calls. Note that with BOX_WIN, the box/panel is a GUI control, and thus you cannot output plain text on top of it; use TPRINT, DPRINT, AUI_CONTROL, and other GUI control generation statements instead of PRINT. Furthermore, with BOX_PAR, since the panel acts like a parent, the cursor position of controls and text to be placed on it must be adjusted to be relative to the box/panel rather than the screen. (The overall effect is similar to using a regular dialog box.) 14. --- MSBOXX.SBR enhancement: BOX_SVA with the BOX_WIN option now saves underlying controls, as well as text, and BOX_RSA + BOX_WIN will restore them. This allows BOX_WIN panels to effectively overlay areas containing either plain text or GUI controls, or both. 15. --- AUI_CONTROL refinement: When CTLOP_DEL is used to delete controls within a specified area (rather than to delete a single control by its ID), it is now more selective about identifying GROUPBOX and FRAME controls that should be deleted. Previously, as long as underlying GROUPBOX or FRAME intersected one of the boundaries of the specified area, it would be deleted. Now, it must be entirely within the specified area in order to deleted. This fixes a problem with overlappying popup frames (such as those created by MSBOXX with the BOX_WIN flag) whereby removing the top frame would delete an overlapping/underlying frame but not all of the controls within it. When the the frame was then restored, the Z order was upside down, so that the frame was obscuring the controls supposed to appear on top of it. ============================================================================ A-Shell Development Notes Version 5.1.1210.1 (22 Mar 2011) ============================================================================ 1. --- REGEX refinement: set the internal recursion limits to be more in line with the available stack space under the various platforms, to minimize the possibility of overrunning the stack with a rogue expression. The limit is 2500 levels of recursion for Windows and 10000 for UNIX. (If you hit the limit, REGEX will return error -21.) ============================================================================ A-Shell Development Notes Version 5.1.1210.0 (21 Mar 2011) ============================================================================ 1. --- EBCDIC Lives! ASCEBC.SBR and EBCASC.SBR (ASCII to EBCDIC conversion routines) now included in the Linux version. (Previously only in A-Shell/AIX.) 2. --- XTREE refinement to the way color bytes are handled. Previously, any color bytes in the answer array were always reset to blank on return to the application, and incoming blank color bytes were treated as "no change" rather than "no color". Now, the color bytes are left alone (passed back to the application the same way they were passed in), and blanks are treated as "no color" rather than "no change". (Note that on the XTROP_CREATE operation, any blanks in the answer array will be initialized from the data array.) Theoretically this change should be transparent to "virtually all" exiting applications, unless they explicitly set color bytes in the answer array to blanks with the intent of getting "no change" rather than "no color". (It is doubtful that any existing application would do such a thing since previously there would have no point in setting answer array color bytes to blank since they were all being set to blank automatically.) The change does have two advantages though: first, it is less confusing (programmers were always wondering why a blank color byte didn't give them "no color"); and second: it lends itself to much better ATE optimization. In a related refinement, blank color bytes in the data array now produce "no color" even when using XTROP_REPLACE with XTF_NOREDRAW. Previously, attempting to change existing colors during a REPLACE operation, and especially attempting to set an existing item or cell's color back to "no color", was ineffective if XTF_NOREDRAW specified. Note that the special color byte value "=" introduced in edit 1209 still works, but is now little different from " " in most cases. The only case where they differ is when a cell's color is potentially affected by more than one color byte (such as a cell color byte and a row color byte). In that case, a cell whose cell color byte is blank will inherit the row (or column) color, whereas a cell color byte of "=" would override the row or column color. 3. --- REGEX.SBR bug fix: Previously, the return of "sub-matches" was not working as expected. (Only the last sub-match was being returned, and into the first sub-match parameter.) Now all the sub-matches are returned into the corresponding parameters, including null sub-matches. (SUBCNT continues to return the total number of sub-matches, including the null ones.) 4. --- REGEX.SBR enhancement: You can now use an array, even an array of dynamic elements, in place of the individual sub-match parameters. To do so, you must first set SUBCNT to the maximum number of elements in the array, and in addition, set the new PCREX_SUBMATCH_ARRAY (defined as &h40000000 in REGEX.DEF) in the FLAGS parameter. For example: MAP1 SUBMATCH(20),S,0 ... SUBCNT = .EXTENT(SUBMATCH()) ! (i.e. SUBCNT = 20) FLAGS = FLAGS or PCREX_SUBMATCH_ARRAY XCALL REGEX,PATTERN,STATUS,SUBJECT,FLAGS,STPOS,MATCH,SUBCNT,SUBMATCH(1) On return, SUBCNT will be set to the total number of sub-matches, and the elements of the array SUBMATCH() will be assigned accordingly (up to the number of elements passed in to REGEX in the SUBCNT parameter). Note that the array may contain empty elements, as not all possible sub-matches (aka "capture groups") will match up to the subject string. Also, the maximum number of allowed sub-matches has been increased from 20 to 100. Note that when a capture group is effectively matched multiple times, only the last match for each capture group is returned. Thus the usefulness of submatches (particularly where REGEX is used as an aid to parsing) is mainly limited to simple capture groups that are to be matched zero or one time. ============================================================================ A-Shell Development Notes Version 5.1.1209.6 (18 Mar 2011) ============================================================================ 1. --- AUTO_EXTEND refinement: A DIMX array initially with 0 elements is now legal if the AUTO_EXTEND operation is specified. Previously it generated an illegal subscript error when the DIMX was processed. ============================================================================ A-Shell Development Notes Version 5.1.1209.5 (16 Mar 2011) ============================================================================ 1. --- Compiler bug fix (edit 482): Detect attempt to embed a new-style IF/ENDIF block in the body of an old-style IF statement. Previously it compiled ok but crashed upon execution. ============================================================================ A-Shell Development Notes Version 5.1.1209.4 (15 Mar 2011) ============================================================================ 1. --- Compiler bug fix (edit 481): "Copying ..." message was displaying the wrong ++include file name when the /LI (local include) option was specified. ============================================================================ A-Shell Development Notes Version 5.1.1209.2 (11 Mar 2011) ============================================================================ 1. --- (UNIX) Bug fix in save/restore area code: Saving / restoring areas across an XCALL AMOS boundary was leading to intermittent memory fault (or possibly a job hanging while burning up CPU). Problem was introduced since 5.1.1198 (although we're not sure exactly when, so an update is strongly advised for any version beyond 1198.) 2. --- Tracing improvement: The ashlog trace messages now contain both the main program and the current SBX, if applicable, e.g. "". Among other advantages, this will help clarify that any location counter (listed with Basic errors and segmentation faults) is relative to the current SBX, not the main program. 3. --- Tracing improvement: Memory allocations now indicate the "handle" (position in A-Shell's allocation table) as well as the address, making it easier to verify that allocations are being properly freed. 4. --- Startup terminal handshake refinement: For telnet/ssh connections where the terminal driver is "WYSE50", "AM65" or "AM75", the timeout on the initial probe to detect ZTERM or ATE on the client has been extended to allow for slower internet connections. Previously it was 1.5 seconds for the initial response and 0.25 for the subsequent responses; now it is 3.0 and 1.5 seconds, respectively. The symptoms of a premature timeout is three-fold: first, you may see a "Z" or "T" next to or instead of the initial dot prompt; second, server-supplied ATE licensing (if applicable) may not work; third, SET TERM will not give any indication of the ZTERM or ATE version. The downside of increasing the timeout is that when connecting from a non-ZTERM, non-ATE emulator using one of those emulations, there will be a longer delay on startup. 5. --- Windows printing refinement: It is now possible to select a custom paper size by its name, rather than just it's number (assuming that the paper shows up in the trace list of available paper sizes). This saves a step (running a test print with TRACE LP to see what number the custom paper was assigned), and also provides a degree of printer independence (since it isn't clear that the same number would be assigned to the custom paper by each printer). Warning: custom paper sizes is an area in which there is considerable variation between printer drivers. In some cases the driver properties dialog will allow you to define a custom paper size. In others, you may need to use the common Devices and Printers > Print Server Properties dialog to define a custom "form" (which may, or may not show up in the list of available paper sizes for a particular printer. But if it does show up, then you should be able to select it via PAPERSIZE=. ============================================================================ A-Shell Development Notes Version 5.1.1209.1 (10 Mar 2011) ============================================================================ 1. --- Internal cleanup of memory allocation tracing (to eliminate spurious trace warnings about invalid attempts to free memory allocations). ============================================================================ A-Shell Development Notes Version 5.1.1209.0 (09 Mar 2011) ============================================================================ 1. --- GDI printing enhancement: New printer init commands allow you define custom paper sizes, if the driver supports it (which is a big IF!): PAPERLENGTH = ### ; units are tenths of mm PAPERWIDTH = ### ; " " " Unfortunately, support for this feature varies widely among printer drivers. Some drivers do not support it at all. Others may support it only if you first set the driver default properties to "Custom" or "User defined" page size (which pretty much undermines the value of being able to set it from the software). In other cases, the feature is only supported in the latest version of the printer driver from the manufacturer. (This is a good general rule: whenever there is a problem with a printer, start by downloading the latest driver from the manufacturer website or the Windows update site.) If you attempt to set the paper length and width, and the driver does not support it, A-Shell will first try to set the paper to the PAPERSIZE value specified in your printer init or print file. (If you didn't specify one, then it will try PAPERSIZE=0.) If after that change, the driver still does not indicate support for individual page length and width, it will try again with PAPERSIZE=CUSTOM (aka 256). Finally if that doesn't work, it will log a trace message (regardless of the TRACE settings) which looks something like: Custom paper width/length not supported by printer driver! If you SET TRACE LP ON, you'll get more detailed trace messages showing the individual steps in the process. For printer drivers that don't support PAPERLENGTH and PAPERWIDTH settings in all modes, the most common workaround is to first set the printer to its "custom" papersize, which may then allow the application to override it with a different custom size. This is why A-Shell tries PAPERSIZE=256 (CUSTOM) automatically. HOWEVER, some drivers may indicate support for PAPERLENGTH and PAPERWIDTH, but in reality it only works when the printer is first set to CUSTOM. This problem can be detected in the LP TRACE as follows: DEVMODE Device:Brother HL-5250DN, Ver:793, Size:156, Extra:2360, ... Requesting paperwidth override to 150.0 mm (5.9 in) Requesting paperlength override to 140.0 mm (5.5 in) Updated page size: 5100 x 6600 pixels The clue here is that there was no attempt to set the papersize prior to requesting the paperwidth override, combined with the fact that the updated page size (5100 x 6600 pixels) doesn't match the requested size. In such a case, you should try adding PAPERSIZE=CUSTOM to the printer init file to see if that resolves the problem, which in the case of this printer, does, as shown in this trace: DEVMODE Device:Brother HL-5250DN, Ver:793, Size:156, Extra:2360, bin=1, duplex=1, paper=1, orient=1, copies=1, dmFields=0x1ff1f Requesting papersize #256 Requesting paperwidth override to 150.0 mm (5.9 in) Requesting paperlength override to 140.0 mm (5.5 in) Updated page size: 3532 x 3300 pixels See this case study of working with custom paper sizes on our forum for more details and tips: http://www.microsabio.net/ubb2/ultimatebb.cgi?ubb=get_topic&f=1&t=000124 Note that unlike PAPERSIZE, PAPERLENGTH and PAPERWIDTH have no corresponding //GDI commands (primarily because the support for them seems to vary so much between printer drivers that the benefits of a non-printer-specific GDI command seem negligible, at least at the moment. 2. --- GDI tracing refinements: The LP TRACE information has been expanded somewhat to help interpret/debug the behavior of the driver when requesting paper sizes. For example, when listing the available paper sizes, it now shows the actual dimensions of the available paper sizes and their full names (according to the driver) rather than just the standard code names and numbers. It also shows the initial and updated paper size (after attempting to set it), making it easier to identify whether the paper size setting is functioning as expected. For example, you may see the following messages (among others) in the trace: Initial page size: 1800 x 3000 pixels Requesting papersize #256 Updated page size: 2550 x 3300 pixels Final page size: 2550 x 3300 pixels (300 x 300 dpi) The above sequence indidates that the initial default paper size was 1800 x 3000 pixels. (See the "Final page size" message to get the pixels per inch or "dpi".) You requested papersize #256 (PAPERSIZE=256 or //PAPERSIZE,256), and this had the immediate and final effect of setting the paper size to 2550 x 3330 pixels. It will also show details about the attempts to set custom paper sizes, including the two-step process of pre-setting the paper size to a supported value and then overriding the length and width. 3. --- APEX paper handling refinement: When the paper size code is numeric and doesn't associate directly with a standard named paper size (like "LETTER"), the actual size will now show in the APEX title bar along with the numeric size code. For example: [Samsung ML-2010 Series - papersize: #257 (165.1 mm x 127.0 mm)] 4. --- XTREE enhancement: New special color index code "=" may be used wherever an RGB color index is used (such as to specify the background color in a cell) to reset the color back to the default. In most cases, this is no different than using a space, with the main exception being that when re-entering an editable tree, a color index of space is interpreted as meaning you want to preserve the current color (whatever it is), whereas "=" will reset it back to the default. This issue arises primarily when using XTF_NOREDRAW and XTROP_RESELECT, where XTREE avoids re-coloring anything except the editable cells with non-blank color index codes. Note that previously you could have accomplished the same thing by explicitly defining an RGB value of 0,0,0 (which is interpreted as "default color", rather than black) and specifying the associated index value. So the new mechanism is just a shortcut (avoids the need to define an extra RGB index, and standardizes the code so as to improve clarity). 5. --- Write protect error code correction: The Basic error code previously returned for attempt to write to a write protected file (e.g. one opened with the READ'ONLY attribute) was 29 (file already exist). It has been corrected to 24 (write protected). ============================================================================ A-Shell Development Notes Version 5.1.1208.1 (03 Mar 2011) ============================================================================ 1. --- Fix XTREE crash bug: Occurred when loading a list-match cell whose contents had no match in the list (typically an empty cell). (Introduced in 1208.0) 2. --- Log file cleanup: eliminate "!Bad Control" trace messages unless the XDEBUG trace flag is set. (These are common non-error warnings in Leo-generated programs when switching panels in a Tab control.) ============================================================================ A-Shell Development Notes Version 5.1.1208.0 (01 Mar 2011) ============================================================================ 1. --- GUI refinement: The standard icon set, housed in ashico1.dll, has been replaced with a new version containing "Vista-style" versions of the same icons. The new icons, which were previously available in ashico1v.dll, are quite similar to the old ones, but have a slightly enhanced style, presumably more aesthetically compatible with Vista and Windows 7. The old icon set has been renamed to ashico1x.dll, and will remain available for manual download on our website. (The two dlls are otherwise identical, so they can be substituted for each other by just renaming the dll.) 2. --- The maximum length of the ERSATZ= filespec has been increased from 70 to 160. 3. --- Aux printing enhancement: When both the server and ATE are at edit 1208+ and the server-side printer-init option PRTCOPIES is FALSE (this is the default for UNIX and whenever DEVICE=AUXLOC:), the server will now send just one physical copy of the printfile to the aux port and will tell the client how many copies to print. The previous method, in which multiple copies were generated on the server side, unbeknownst to the client, remains in effect for non-ATE clients and whenever the either the server or ATE client is older than 5.1.1208, and when PRTCOPIES=TRUE on the server side. The motivation for adding this further bit of confusion to an already confusing area is to overcome three negative aspects associated with generating the copies on the server side: a. If the server generates the copies, the client doesn't realize it has more than one copy, and thus if displaying a printer dialog, would show only one copy, which can confuse the user (who is expecting multiple copies). If the user tries to "correct" the numnber of copies, the result would be copies upon copies (e.g. 4 instead of 2, 9 instead of 3, etc.) b. APEX would show a single document consisting of the concatenation of the multiple copies. For example, if the original document had 4 pages and 3 copies were requested, APEX would show a 12 page document. (If you then redirect this to a non-paper device, like a PDF writer, you'd end up with a document containing the multiple sets of pages, which is silly.) c. Sending the original printfile to the client multiple times is not particularly efficient, and could cause significant delays for large files. 4. ATE command set enhancement: The AG_SPOOLCFG command now supports an optional copies parameter: TAB(-10,AG_SPOOLCFG);file,ptr,fsize,internal,switches,copies;chr(127); If copies is not specified, the default is 1. The value will be used by the ATE client to generate multiple copies of the subsequent printfile send via the AUXLOC: mechanism. This feature is primarily used within A-Shell when processing AUXLOC: printing requests. If used directly by an application, you should first verify that the client is ATE 5.1.1208.0 or higher (see MX_GETVER). There is no harm in sending the copies parameter to older versions of ATE, but it will have no effect (and thus the extra copies won't be generated). 5. Windows printing bug fix: Close a loophole which, in some obscure cases (depending on the printer driver and/or the sequence of events), requesting multiple copies in the printer dialog would result in both A-Shell and the printer driver generating copies (thus yielding the square of the desired number of copies, i.e. 4 instead of 2). 6. XTREE bug fix: Close loophole related to optimization which allowed the "|" prefix (to disable editing in an otherwise editable cell) to appear in the tree display. 7. XTREE enhancement: New cformat code P may be used with editable cells (cformat codes E, l) to indicate that the first position (after any cell code bytes such as the color byte used with cformat B) is reserved for either a space (indicating editable) or a "|" indicating that the cell is not editable. Note that the "|" prefix has long been supported as a code to indicate that the cell is disabled for editing, but it is sometimes awkward to use because of confusion over whether to shift the remaining characters over. The new P option allows you to reserve a position (same concept as with the background cell color byte used with B), which may be easier to use, depending on your application logic. Also note that feature is not necessary with the shared lists (cformat s used with CellList or CellListX), because in those cases, a space is already reserved for a prefix code, in which "|" is already an option. 8. Scroll-back mouse cursor bug fix: When the scroll-back feature was enabled (Control_Shift_UpArrow), when the mouse hovered over the main window vertical scroll bar, the mouse cursor was changing to a horizontal resizing arrow rather than a normal single arrow. 9. Print tracing/logging refinement: The OPR:SPOOL.LOG (UNIX) or ashlog.log (if Windows or the LP TRACE activated) now gives two values for copies (e.g. C=1/2), where the first number (1 in this case) indicates the number of copies processed locally by A-Shell, and the second number (2) indicates the number of copies requested to be generated by the remote agent (whether the spooler or a terminal emulator client). The LP TRACE also indicates the version edit number of the ATE client, if applicable (e.g. "edit=1208"). Together these may help debug issues relating to how copies are handled (particularly after the copies-handling enhancement described above). ============================================================================ A-Shell Development Notes Version 5.1.1207.0 (28 Feb 2011) ============================================================================ 1. --- XTEXT update: Since 5.1.1204, A-Shell has nominally supported TER15/HTS10 as well as TER18/HTS13, but experience has revealed problems with with trying to support both versions in the same A-Shell executable. (One symptom was that the //XTEXT GDI directive wasn't working with TER18, but did work with TER15.) So as of this release, only TER18.DLL and HTS13.DLL are supported if using XTEXT. On the plus side, there is a new feature which might possibly be useful (besides the hundreds of new features that we'll probably never use, and the hundreds of bug fixes that we may never appreciate): the ability to read (but not write) Word docx files. A new TXFF_DOCX symbol (7) has been defined in XTEXT.DEF, although for input (txc'docfmt'src), any value will work (other than TXFF_HTML), since the docx internal format is easily recognized. There is another new DLL, TXML2.DLL, which in conjunction with the Windows DLL MSXML# (# = 2+), is required for the docx import feature. 2. --- GDI Printing refinement: When a //GDI directive fails, the directive itself is printed (rather than the intended effect of the directive). In addition, if the directive failed because of a Windows error, then the error code will be printed at the end of the line, e.g. "(err 1400)". You can look up Windows error codes on the web, or translate them using MX_ERRNOMSG. 3. --- XTEXT/ATE bug fix: The server side was not recognizing http:// specs and thus was trying to transfer them as files to the client, without success. 4. --- XTEXT bug fix: In web browser mode, hyper-linking to pages with relative addresses (e.g. "./newpage.html") wasn't working. 5. --- XTREE bug fix: Editable cells were not always respecting the editing-related column flags (such as conditional validation) when the mouse cursor or caret was not synchronized with the cell currently being edited. ============================================================================ A-Shell Development Notes Version 5.1.1206.1 (25 Feb 2011) ============================================================================ 1. --- INPUT bug fix: Inputting from a file to an array of dynamic string variables was generating a protection fault if an INPUT operation was attempted after the previous INPUT hit the EOF. 2. --- xMASCB.SBR bug fix. A previous update had replaced the current version with an earlier one that had an issue with a bad file open mode. ============================================================================ A-Shell Development Notes Version 5.1.1206.0 (23 Feb 2011) ============================================================================ 1. --- PRINT.SBR enhancement: Two new MIAME.INI options allow for the time and/or user name to be added to the report header: SBR=PRINT_TIME ; Add time (hh:mm am) to date in header SBR=PRINT_JOBUSN ; Add user name to date in header If either option is selected, the "Run Date: dd-mmm-yy" header string will be shortened to just "dd-mmm-yy" with the time and/or user name appended. If both options are selected, the date format will be changed to "mm-dd-yy" (or "dd-mm-yy" depending on the LDF) to allow one more character in the name field without before limiting the maximum title or coname length. Note that the user name may be truncated to as few as 6 characters depending on the paper width and whether the time was also displayed. Also, if both are selected, the report title and coname strings will be truncated to 47 characters (down from the previous maximum of 50). 2. --- Log file cleanup: Resolve problem underlying two cases of log file messages warning about attempts to free memory not in table. (Problem wasn't serious, but looked bad in the log.) Also, eliminated unwanted rlock: log messages that would occur under certain exit conditions. ============================================================================ A-Shell Development Notes Version 5.1.1205.9 (22 Feb 2011) ============================================================================ 1. --- XTREE bug fix: Editable checkbox cells (T or T+) were not properly entering editable mode when clicked on. This was leading to failure of the check-all (^A), clear-all (^B), and undo (^Z) commands to work reliably. 2. --- XTREE bug fix: Exiting from an editable cell with ESC (or in some cases another keyboard command) was sometimes returning 0 for the xtr'xrow, xtr'xcol, xtr'targetrow and/or xtr'targetcol. ============================================================================ A-Shell Development Notes Version 5.1.1205.8 (22 Feb 2011) ============================================================================ 1. --- Combo box bug fix: fix issue with unresponsiveness of click on combo box drop-down button (introduced in 1205.7) 2. --- AUI_CONTROL bug fix: Adding a control within a groupbox whose parent was the main window (not a dialog) was failing to detect and replace a previous instance of the same control (leading to multiple controls stacked on top of each other, which could have strange results if their states were different). ============================================================================ A-Shell Development Notes Version 5.1.1205.7 (21 Feb 2011) ============================================================================ 1. --- Log file refinement: an improved trace added in 1205.6 was resulting in spurious "rocky_unlock" error messages in the log. 2. --- INFLD self-combo refinement: clicking on the drop-down button is now more responsive. Previously, in some cases it displayed an empty dropdown list rather than exiting on the first click. 3. --- SORTIT.SBR bug fix: the natural sort options were not sorting reliably when the last byte of a key for one element was adjacent to the first byte of a key for another element (e.g. when the key size was equal to the element size.) 4. --- AUI_CONTROL bug fix: close an extremely obscure window of crash opportunity relating to recreating checkbox controls through INFLD. ============================================================================ A-Shell Development Notes Version 5.1.1205.6 (20 Feb 2011) ============================================================================ 1. --- XTREE bug fix: close another loophole leading to a crash. 2. --- XTREE refinement: In a self-combo cell, changing the contents and then clicking the down-arrow now returns the updated cell contents. 3. --- PRINT USING MASK bug fix: Certain combinations involving a null or empty mask were causing an infinite loop of CRLF output. 4. --- ATSD refinement: In the rare case where a connection is lost while a process is in some kind of low-level loop outputting characters (like in the case just described above), the trace messages which are output to the log have been optimized (1 message per 256 chars, rather than 1 per 1). And after a million characters, the process is aborted. Note that it may be normal and even desirable for the process to continue to output a reasonable amount of characters while it responds to the disconnect error and finishes whatever it was doing, but at some point we have to assume that the process has run away. 5. --- ISAM bug fix: The MIAME.INI OPTION=ISAM_IDXLOK was causing the IDX auto- expand to leave the index locked, causing the next ISAM operation on the index to hang. (ISAM_IDXLOK is no longer recommended for Windows XP and beyond, and was never recommended for UNIX, but it is probably harmless.) 6. --- Record locking refinement (Windows): After about 15 seconds of looping on a lock request, A-Shell now displays the lock pending trace messages which previously only displayed if the LOCKS TRACE flag was set. (The idea is that after 15 seconds, chances are that the user will think the process has hung, which may lead to unnecessary tech support / debugging; the lock pending message, however cryptic, will at least make clear the cause of the delay.) The messages appear on the bottom status line. In another refinment, the bottom status line will be automatically enabled, if necessary (so the messages can be seen, without overwriting possibly important screen text on line 24). One further refinement: when the user hits ^C to abort from a lock wait, the lock event is now always logged to the ashlog.log file. (Previously, lock events were only logged if both the LOCKS and PERF TRACE flags were set.) ============================================================================ A-Shell Development Notes Version 5.1.1205.5 (18 Feb 2011) ============================================================================ 1. --- Minor enhancements to ISAM+XDEBUG tracing to help track down problem in field. ============================================================================ A-Shell Development Notes Version 5.1.1205.4 (15 Feb 2011) ============================================================================ 1. --- XTREE bug fix: Close a loophole in the optimization logic that was allowing an invalid memory reference to occur under the right circumstances. ============================================================================ A-Shell Development Notes Version 5.1.1205.3 (11 Feb 2011) ============================================================================ 1. --- ATE fix: Using the OpenSSH option was sometimes resulting in an initial terminal emulation of "dumb" rather than the selected one. ============================================================================ A-Shell Development Notes Version 5.1.1205.1 (10 Feb 2011) ============================================================================ 1. --- XTREE bug fix: clicking on an inactive tree was, in some cases, generating a GPF. (Problem introduced in 1205.0 with ToolTips.) ============================================================================ A-Shell Development Notes Version 5.1.1205.0 (08 Feb 2011) ============================================================================ 1. --- EVENTWAIT enhancement: You can now pass alphanumeric IDs for the PARENTID and CTLID parameters. (This eliminates one of the most common excuses for needing a numeric control ID.) Note, however, that the updated CTLID parameter will be returned as a number (although formatted as a string if you pass a string parameter). This shouldn't make any difference to your application as a string-formatted numeric control ID may be used anywhere an alphanumeric control ID may be used. 2. --- XTREE enhancement: You can now specify the tree's parent using the alphanumeric ID, by setting xtr'parentid=0 and then specifing an Advanced Coldef Option for any column of ParentID=xxx (where xxx is the alphanumeric parent ID). Note that unlike the normal case with Advanced Coldef Options, ParentID is case sensitive. 3. --- XTREE enhancement: New Advanced Coldef Option to specify a custom tooltip for the column: ToolTip= The limit on text size for any one tooltip is 1023 bytes. For all trees excluding property sheets, the tooltip will display when the mouse hovers over the column header and the tree is not currently editing a cell. (During cell editing, the only tree-related tooltip that will appear is the tooltip for that cell.) For property sheets, when not actively editing a cell, tooltips will display when the mouse hovers over a cell whose logical "column" has a tooltip. As with case above, during cell editing, the only tooltip display will be for the cell being edited. Known limitations: - Tooltips do not display while "editing" a checkbox or radiobutton cell. - There is no way to associate a tooltip with row headers. 4. --- XTREE bug fix: The automatic red coloring of cells with negative values was off by one column. (The column to the left of the negative value was being displayed in red.) Problem introduced around edit 1201. 5. --- XTREE internal optimization: COLDEF parsing has been reorganized to be more CPU efficient. (The improvement is probably undetectable though, except perhaps for trees with many columns and many advance coldef options.) 6. --- XTREE enhancement: it is now possible to use the list substitution feature without requiring that the column (or tree) be editable, by using the new cformat code "ll" (in place of "l" for combo box), or "ss" (in place of "s" for shared list). 7. --- XTREE bug fixes: Close a possible memory corruption loophole when loading more images than the initial imgcount. Close another possible memory corruption loophole in property sheet mode. ============================================================================ A-Shell Development Notes Version 5.1.1204.0 (03 Feb 2011) ============================================================================ 1. --- XTEXT (A-Shell/Windows/ATE GUI) update: support new version of underlying control modules (TER18.DLL and HTS13.DLL) in addition to the earlier versions TER15.DLL and HTS10.DLL. Currently there are no new features being exposed, but the updates contain numerous internal refinements and bug fixes that might be applicable to someone. Note that if you have TER18.DLL present, then you must also have HTS13.DLL. (You cannot mix TER18 with HTS10.) Also note that if TER18.DLL is not present, A-Shell continues to use the previous TER15.DLL and HTS10.DLL. (So if you encounter any problem with the updated DLLs, just rename or delete TER18.DLL to go back to the previously supported versions.) ============================================================================ A-Shell Development Notes Version 5.1.1203.3 (02 Feb 2011) ============================================================================ 1. --- XTREE refinement: Adjust typeahead logic introduced in 5.1.1197. The new rule is: On calling XTREE, if there is a pending event from clicking on the tree while it was inactive, then any unprocessed keyboard characters are stripped and ignored. In addition, if the XTF2_CLRDEFER flag is set and there is a virtual exitcode sequence pending, it is also stripped. Previously, the virtual exitcode sequence stripping was not dependent on the XTF2_CLRDEFER flag, which made it impossible to use XTREE as a kind of eventwait handler for click events that had already happened (but which hadn't been detected by the application yet.) ============================================================================ A-Shell Development Notes Version 5.1.1203.2 (31 Jan 2011) ============================================================================ 1. --- XTREE refinement: In property sheet mode (XTF2_PROPSHEET), if Dspwid=# is specified for an editable cell, it now determines the width of the edit box when a cell is being actively edited. This provides an alternate method (besides cformat "_") to adjust the width of the edit box to be more appropriate for the maximum number of characters allowed in that cell. If Dspwid is not specified, then the cformat "_" logic is used (see 1202.3 below), and if that isn't specified, the edit box width will be the same as the column width. Note that in the property sheet case, the units of Dspwid are taken to be characters, rather than grid units (as in the non-property sheet case.) ============================================================================ A-Shell Development Notes Version 5.1.1203.1 (31 Jan 2011) ============================================================================ 1. --- XTREE refinement: Remove complaint about the ANSARY width not matching the coldef expectation if the XTF2_ANSEQDATA flag is set. ============================================================================ A-Shell Development Notes Version 5.1.1203.0 (30 Jan 2011) ============================================================================ 1. --- XTREE enhancement: drag/drop between trees. To enable, set the new flag XTF2_DRAGDROP2 (&h00002000) in the source tree, and specify the new new Advanced Coldef Option, DragDropClick=###, in the destination tree. (### is the negative exitcode to be generated when an item (or items) from the source tree is/are dropped on to the destination tree. (For example, DragDropClick=150 will generate exitcode -150.) Notes: - This form of drag/drop (inter-tree) does not require any special mapping of the answer array (as is required with the intra-tree drag/drop activated by XTF_DRAGDROP). - Both forms of drag/drop are essentially independent (you can have either one or both). - No distinction is made regarding the exact position of the drop within the target control. The only information returned to the application will be the selection information for the source tree, and the DragDropClick exitcode from the target tree. - It is left to the application to complete the operation signified by the drag/drop action. (Typically this would involve copying the selected items from the source tree to they destination tree, and perhaps removing them from the source tree.) The sample program XTRA4.BP in [908,21] has been completely rewritten to demonstrate a simple shopping cart application using this capability. 2. --- New GDI printing directive: //POLYGON,MODE,BRUSH,X1,Y1,X2,Y2,X3,Y3{...X10,Y10} This draws a polygon based on up to 10 points. Straight lines are drawn between the points using the current pen (including a line from the last point back to the first). The points are specified in the current map mode. MODE specifies the polygon fill mode: 0: Use existing mode (whatever was last set) 1 or "ALTERNATE": Fills in the area between odd and even sides 2 or "WINDING": Fills in any area with a non-zero "winding value". The difference between the modes is not significant for simple enclosed polygons, but becomes apparent with polygons whose sides cross over themselves. An illustrative example would be a five-pointed star, whose lines intersect to create a pentagon in the middle. The ALTERNATE fill mode would fill in the points, whereas the WINDING fill mode would fill in the entire region. The "winding value" is defined as the number of times a pen used to draw the polygon would go around the region. 3. --- New icon: A-Shell now defaults to using the new "turquoise sea shell in a white box" icon. Don't worry, this isn't part of some Madison Avenue corporate re-branding scheme, so please don't start any boycotts or letter-writing campaigns to preserve the old green acorn icon (which will remain available indefinitely, via the "-g acorn" command line switch). There are also two other new variations included in the executable which can be selected via the -g switch: ash1t (a darker blue shell with a transparent background), and ash2b (a darker blue, more curvaceous shell in a white box). 4. --- ATE serial passthrough fix: the "progress bar" in the lower right corner was staying on, even after the serial passthrough was closed. ============================================================================ A-Shell Development Notes Version 5.1.1202.6 (29 Jan 2011) ============================================================================ 1. --- XTREE bug fix: Certain editable multi-select trees were becoming scrambled when updating the editable cell data from the answer array. ============================================================================ A-Shell Development Notes Version 5.1.1202.5 (29 Jan 2011) ============================================================================ 1. --- Buffer overflow loophole closed. A loophole in a commonly used memory copying routine which could have allowed a buffer overflow if passed a size <= 0 bytes. (There are an unknown number of possible places where this might have happened, but was discovered when passing XTREE a value of zero for the addcnt parameter.) 2. --- XTREE internals reorganization: A considerable amount of code within XTREE has been reorganized to make it easier to maintain. In theory this should not introduce any new behavior, but it is noted here to identify the cause should any such unwanted behavior surface. ============================================================================ A-Shell Development Notes Version 5.1.1202.4 (26 Jan 2011) ============================================================================ 1. --- XTREE enhancement: Property sheet mode now supports multi-level. To configure this, specify the cformat code "@" for each "column" (i.e. each item) that should appear at level 1. Columns (i.e. items) without this code will appear at level 0. To designate an item at level 2 or below, add additional "@" codes (one per level). For example: coldef = "1~1~Shipping Info~S~~" ! Level 0 (no "@") coldef = coldef + "2~30~Address~SE@~" ! Level 1 (one "@") coldef = coldef + "32~30~City~SE@~" ! Level 1 (one "@") ... 2. --- XTREE enhancement: New cformat code " " (blank) for "no strip". When used in conjunction with a Mask, causes any leading spaces introduced as a result of the mask formatting to be preserved within the field. (Normally they are stripped before applying the column's justification.) This rather obscure feature may be useful in property sheets where you want to right justify some fields, but don't want them justified all the way to the right edge of the edit column (which may be wider than appropriate for the items in question, due to other, longer text items). For example, if you have some numeric items that you want to right justify (so that they line up with each other) but don't want way over at the right edge of the column, you can specify the combination of "<" (left justify), " " (no strip), and "Mask=###,###,###,###.##". The "<" will force the data to be left justified in the cell, but the no strip option will effectively preserve right justification (provided that you are using a fixed pitch font). Typically in this case, you'll want to make the column and mask wider than you would otherwise need, so that the displayed values are pushed farther to the right. The xtra15.bp sample program has been updated to illustrate this. ============================================================================ A-Shell Development Notes Version 5.1.1202.3 (25 Jan 2011) ============================================================================ 1. --- XTREE enhancement: Column alignment in property sheet mode now works as expected (i.e. gets translated to cell alignment for the cells in the values column). Note that if you are using anything but left justification, and if there is any possibility of cells extending logically beyond the control width, you should xtr'closedended mode and XTF2_AUTOEXPCOL. Otherwise, you may end up column data that doesn't appear unless you use the horizontal scroll bar to scroll to the right. 2. --- XTREE enhancement: New cformat code "_" (underline) may be used with editable columns to cause the edit cell to shrink to fit only the number of allowed characters (so as to not give the user an initial false impression of the number of allowed characters). This will probably only be reasonable when a fixed pitch font is used. 3. --- XTREE refinements: xtr'closedended now works better when there are row headers. ============================================================================ A-Shell Development Notes Version 5.1.1202.2 (25 Jan 2011) ============================================================================ 1. --- Compiler bug fix (edit 480): Fix problem introduced in edit 479 causing "FOR" statements with a "STEP" clause to generate syntax errors. ============================================================================ A-Shell Development Notes Version 5.1.1202.1 (24 Jan 2011) ============================================================================ 1. --- XTREE bug fixes: clean up various issues related to property sheet mode. 2. --- Compiler bug fix (edit 479): Fix an additional problem with += and -= operators, introduced in edit 478 (5.1.1202.0), leading to bogus unmapped variable errors. ============================================================================ A-Shell Development Notes Version 5.1.1202.0 (23 Jan 2011) ============================================================================ *** Beta warning: the two XTREE enhancements described below involved a considerable number of internal structural changes within XTREE, so it is highly possible that despite in-house testing, some side-effects may be revealed during beta testing. (So if you use XTREE, this would not be a good update to put immediately into production!) 1. --- XTREE enhancement: New flag XTF2_ANSEQDATA (&h0001000) may be used to indicate that the layout of the answer array is the same as that of the data array. The main limitation is that it does not support drag/drop or multi-selection. (It may be extended in the future to the more general case). The current primary motivation is to permit the use of same array (or identically formatted ones) for both the answer and data in trees involving checkboxes. (You were already allowed to use the same array for both parameters, but it wouldn't have worked with checkboxes due to the normal rule requiring checkboxes to be placed at the start of each row in the answer array.) The flag is set automatically when you pass the same variable for both the answer and data parameters. 2. --- XTREE enhancement: "property sheet" (aka "vertical") mode. This is specified by the new flag XTF2_PROPSHEET (&h00000800). A "property sheet" is a control made up of two columns and a variable number of rows; the first column contains labels (attributes); the second column contains the data corresponding to the labels (attribute values). There was nothing stopping you from previously implementing such a structure with a two-column XTREE. But it was difficult, if not impossible, to support a variety of different data formats (checkboxes, radio buttons, different widths of editable text, lists, etc.), since in the property sheet configuration, they would all be in the same column and the XTREE configuration scheme tends to limit each column to a single data format. The XTF2_PROPSHEET option addresses this by effectively rotating the tree 90 degrees so that the columns (according to the coldef) are displayed as rows. The column titles become the row headers or labels. But there are several limitations to keep in mind: - You are limited to a single row of data (which appears as a column). In fact, rather than specify an array of one item, you can just specify a singular structure (whose fields line up with the column definitions.) Since the usual object is to edit this structure, you can specify a copy of the same structure for the answer parameter (remember to set the XTF2_ANSEQDATA flag), or specify the same variable for both parameters. - You cannot define any hidden columns. (This includes the columns that would be needed to support any row-oriented features like row color, row font. - None of the following are supported: XTF_MSEL, XTF_DRAGDROP, XTF_REORD, XTF_SORT, XTF_MLVL, XTF_SPLIT. - Column colors (RBGbg, RGBfg) are not (yet) supported. But you can assign background colors to individual cells using cformat B. See the new SOSLIB sample program, XTRA15.BP, for an example of property sheet mode. (Download from http://www.microsabio.net/dist/soslib/) 3. --- MX_SHELLEX refinement: remove 260 character limit on objectspec, and increase the 500 character limit on the parms argument to 1024. There remains an overall limit of 4096 bytes for all of the arguments combined. If the limit is exceeded, the routine will return with status 8 (out of memory). 4. --- Compiler bug fix (edit 476): A prior edit (475) (see 1198.2 below) introduced a bug which effectively disallowed the use of multiple-dimensioned array variables in a FOR statement. 5. --- Compiler bug fix (edit 477): The +=, -=, *= and /= operators (introduced in compiler edit 475; see 1195.0 below) were treating subscripted variables as if they were scalars. When using /M, this would have most likely caused a variable-not-mapped error. But without /M, or in the case where there was a mapped scalar of the same name, statements of the form: var1(a) += b would have been interpreted as var1(a) = var1 + b which obviously would have been semantically (but not syntactically) wrong. 6. Compiler bug fix (edit 478): sizeof() was not allowing subscripted variables. It was also not working with private variables. 7. --- INPUT #CH refinement: A ^Z at the end of a file will now be stripped from the returned variable, except in INPUT RAW mode. See the forum post http://www.microsabio.net/ubb2/ultimatebb.cgi?ubb=get_topic;f=3;t=000681#000004 for a detailed discussion of the issue. 8. --- GDI printing enhancement - four new GDI directives implemented: //XOFFSET,# //YOFFSET,# //XORIGIN,# //YORIGIN,# These may appear within the top 8 lines of a printfile (and before any printable text) to get the effect of the equivalent XOFFSET, YOFFSET, XORIGIN and YORIGIN printer init file commands (which see in the Setup Guide at http://www.microsabio.net/dist/doc/conref/xoffsetyoffset.htm and http://www.microsabio.net/dist/doc/conref/xoriginyorigin.htm ). Note that the arguments are always in twips, independent of the map mode. 9. --- Icon button bug fix: prior fix introduced in 1190.5 relating to a problem with icon buttons, had side effect of causing icon buttons to never lose their visual "focused" status after getting it. 10. --- INFLD refinement: ^C now returns exitcode 10 when both TYPE V and |K are set and we are in GUI mode. |K normally causes ^C to be treated as copy-to-clipboard, but now when V is set, it forces the exitcode 10 action. 11. --- XTREE bug fix: When an exit from an editable cell involves two possible exitcodes (-48 for validation, plus something else such as from a click event), the other exitcode is now returned rather than the -48. (This restores the original behavior prior the changes to support multiple exit codes in 5.1.1196). Note that if you specify the xinfo parameter, the -48 will still be in the list, but it will now be in the second position. Also note that you can detect whether cell validation is needed in such a case by looking at the XTR'XVALIDATE field. 12. --- Log file bug fix: close a loophole which rarely resulted in a harmless but alarming error message to display during the process of rolling over the ashlog.log file. 13. --- Memory allocation tracing refinement: eliminate a couple of instances of "bad request to free memory" messages in the log when the MALLOC trace was set. (The message was harmless, but disturbing.) ============================================================================ A-Shell Development Notes Version 5.1.1201.8 (17 Jan 2011) ============================================================================ 1. --- XTREE/ATE server-side bug fix: Close a loophole in the optimization logic which allowed for a GPF if XTREE was called without an XTRCTL param. ============================================================================ A-Shell Development Notes Version 5.1.1201.7 (14 Jan 2011) ============================================================================ 1. --- INFLD date bug fix: In some cases, setting XMIN=0 was not allowing a blank date. (Problem introduced in recent date-related patches.) 2. --- INFLD form bug fix: A form that was longer than MAXCHARS was leading to wierd formatting in conjunction with the Z (zero fill) type code. ============================================================================ A-Shell Development Notes Version 5.1.1201.6 (13 Jan 2011) ============================================================================ 1. --- INFLD font resizing bug fix: In fields using ||f but where the "fixed pitch edit" option in the Misc Settings is not set, resizing the window was causing the font in the active INFLD field to end up smaller than it otherwise should have been. (This probably became more noticeable with 5.1.1200.) 2. --- File hook memory leak fix: In some cases, the leak caused A-Shell to try to release a block of memory that had been re-assigned to something else, which in turn could have led to a memory fault. ============================================================================ A-Shell Development Notes Version 5.1.1201.5 (12 Jan 2011) ============================================================================ 1. --- XTREE bug fix: In some cases, hitting ESC in a simple-selection tree was returning ANSWER=1 (along with EXITCODE=1), causing problems for some applications which were relying on ANSWER coming back 0 on ESC. ============================================================================ A-Shell Development Notes Version 5.1.1201.4 (10 Jan 2011) ============================================================================ 1. --- XTREE refinement: Using XTROP_CREATE instead of XTROP_REPLACE when updating an existing tree now disables an optimization (started in 1196) that avoids pre-deleting the existing row data before replacing it with the new data. That optimization sometimes leads to a problem with row colors, whereby you have a row color set to blank expecting to get white, but instead you get whatever color was previously in that row. You can also avoid that problem by turning off XTF_NOREDRAW, or perhaps most explicitly, by defining an explicit RGBxx entry for white (255,255,255) and using it instead of blank when updating rows in an existing tree. ============================================================================ A-Shell Development Notes Version 5.1.1201.3 (10 Jan 2011) ============================================================================ 1. --- GUI rapid click bug fix: Revisit fix from 1200.1 relating to rapid clicks on the same button. (Wasn't always working as intended.) 2. --- Windows directory utilities bug fix: The basic directory utilities to lookup a directory, create a directory and delete a directory were treating directories with a trailing backslash as if different from the same directory without the backslash, leading to some confusing errors in various file operations. ============================================================================ A-Shell Development Notes Version 5.1.1201.2 (07 Jan 2011) ============================================================================ 1. --- INFLD bug fix: date swap (>) was not working properly with assymetric date format masks (e.g. 99/99/9999). ============================================================================ A-Shell Development Notes Version 5.1.1201.1 (06 Jan 2011) ============================================================================ 1. --- Bug fix: close a tiny loophole allowing for a possible bogus attempt to release allocated memory, which may have caused A-Shell to crash. (The problem has only been recognized on a single Linux system, and the code has been in use for years, so the problem is pretty rare.) ============================================================================ A-Shell Development Notes Version 5.1.1201.0 (06 Jan 2011) ============================================================================ 1. --- (Windows) New Subroutine to create encoded bar string for new US Post Office intelligent bar codes: XCALL USPSBS, TRACKSTR, ROUTESTR, BARSTR, STATUS Where: TRACKSTR (S,21) [in] Tracking string ROUTESTR (S,12) [in] Route string BARSTR (S,66) [out] Returned encoded bar string STATUS (F) [out] Returns 0 for success, else: -1 = parameter error -2 = unable to load USPS4CB.DLL -3 = unable to locate the USPS4CB() function -99 = not supported on current platform >0 = invalid TRACKSTR and/or ROUTESTR The USPS4CB.DLL routine is available from the post office website http://ribbs.usps.gov/OneCodeSOLUTION/ and must be saved somewhere in the path (or in the A-Shell bin directory). See the publications on the above web site for details on creating the TRACKSTR and ROUTESTR values. The returned BARSTR is a character format equivalent of the graphic bar code, designed to be easy to convert to the graphic format. (See the documents on the above web page for specifications.) See the SOSLIB directory [908,52] for sample and test programs. Note: this is a preliminary beta release and may be subject to change before it is stabilized. ============================================================================ A-Shell Development Notes Version 5.1.1200.1 (06 Jan 2011) ============================================================================ 1. --- Triad catalog refinement: improved tracing. 2. --- GUI click refinement: Rapid clicking on a single button works better now (up to 8 clicks per second should work). 3. --- INFLD fix: TYPE |Z wasn't overriding TYPE |K. Thus ^Z was performing "undo" rather than exiting with exitcode 18. 4. --- INFLD fix: 8 digit dates with the date swap (>) option and a 99/99/9999 form (f) were not formatting correctly. 5. --- INFLD fix: Right justification was not working properly in GUI mode in conjunction with MAXPT. (The display of the added digits were often getting truncated by the end of the field.) ============================================================================ A-Shell Development Notes Version 5.1.1200.0 (05 Jan 2011) ============================================================================ 1. --- INFLD enhancement: date fields (except for the GUI date picker) can now use a "form" (TYPE "f", SETDEF set to something like "99/99/99"). This provides a sort of middle way between the Windows date picker control (which some people don't like), and a standard date field (in which the separators don't appear until after hitting ENTER). 2. --- INFLD enhancement: New TYPE ||D allows a date field to be filled with zeroes. 3. --- INFLD refinement: When using TYPE Z (zero fill), leading zeroes are no longer stripped on entering the field for date fields or form fields. (Stripping the leading zeroes in such cases may mess up the alignment of the form or the interpretation of the individual digits in the date.) 4. --- INFLD XMAX vs MAXCHRS bug fixes: In several cases, INFLD was using the XMAX value where it should have been using the MAXCHRS value, which limited your ability to use XMAX to expand the field with without changing the logic of the control. (For example, with dates, the format should be based on MAXCHRS not XMAX. For zero fill, it should fill to the MAXCHRS size, not the XMAX size.) Note that when MAXCHRS not specified, it is treated as equal to XMAX, so this only affected cases where you explicitly set the two to different values. 5. --- GUI edit control refinement: Fixed pitch fonts used in edit controls were often slightly too wide for the control, causing the last character(s) to be truncated. This should reduce or eliminate the need to resort to increasing XMAX in order to allow more space for the too-large characters. 6. --- XTREE bug fix: an internal timer overflow was in some cases making it impossible to exit from the first cell editing operation of an XTREE session. The problem was introduced around 1197.3, and only affected machines on which A-Shell or ATE runs on and which have been up for more than about 24 days, cycling on and off every 24 days after that. Since normal workstations are typically rebooted more often than that, the problem is mainly associated with Windows servers and thin (or RDP) clients (where XTREE is actually running on the server). So if you have such an environment that uses XTREE editable cells, even if you haven't experienced the problem, you should definitely update if running anything between 1197 and 1199. Or, be prepared to reboot your machine if the problem surfaces. ============================================================================ A-Shell Development Notes Version 5.1.1199.0 (03 Jan 2011) ============================================================================ 1. --- INFLD GUI enhancement for Windows Vista and above: Date/Time fields (using the Date Picker control) now resize themselves as needed (for Vista and above) to match the optimum width required for the control's current style. For versions of Windows prior to Vista, it will continue to try to estimate the necessary width, but this is error-prone due to the difficulty of knowing all of the factors that affect the visual appearance of the control. And for cases where you need more width than the default, you can use a larger XMAX value to adjust it. (Note that when using XMAX to set the display width of a Date/Time control, make sure to use MAXCHRS to set the number of editable characters (e.g. 6 or 8). 2. --- INFLD GUI refinement for Windows versions prior to Vista: The automatic width expansion logic for Date/Time fields using the Date Picker control has been adjusted to allow a bit more room when using a fixed pitch font. (Previously, these were often getting truncated unless you manually expanded the width using the technique described above.) 3. --- INFLD enhancement: The TYPE code "u" now works for both date/time fields and numeric fields to force INFLD to use the relevant formatting options from the Language Definition File. For dates (D and d), if the "u" appears prior to the D or d and the LDF specifies the DDMMYY format, INFLD effectively sets the "U" (European date format) code. For numeric fields, the "u" may appear anywhere in order to use the decimal point and thousands separator characters from the LDF. Note that the "." keyboard character will be converted to the LDF-specified decimal point character (to facilitate numeric keypad operations). ============================================================================ A-Shell Development Notes Version 5.1.1198.4 (28 Dec 2010) ============================================================================ 1. --- GUI click timing adjustment: refine the change in 1198.2 to shorten the time window for buttons and static control clicks to allow 1 new click event for the same button every 0.5 seconds. ============================================================================ A-Shell Development Notes Version 5.1.1198.3 (24 Dec 2010) ============================================================================ 1. --- XTREE refinement: You may now determine how many rows are considered when optimizing the column widths. Previously, it always looked at the first 100 rows, and this remains the default. But you can override the default by specifying the new Advance Coldef parameter: ColOptRows=### (Short for Column Optimization Rows.) If ### is positive, it indicates the number of rows to consider for that column (max is 32767). If negative, it indicates the percentage of the total rows to consider. Any column that does not have a ColOptRows=### parameter will use the default # of rows (normally 100). To change the default, specify ColOptRows=### with the zero column. Note that the entire point of this exercise is to balance the column optimization with performance. The more rows that have to be considered, the longer it takes to arrive at the optimum width. The default of 100 rows is generally sufficient for "pretty good" optimization, and with negligible performance overhead. But, depending on the variability of the data in each column it may be that much less would be sufficient, or much more insufficient. As a rule of thumb, figure about 25 cells per millisecond of optimization time. So for a 1000 row x 30 column grid, the default optimization (looking at 100 rows) would take about 100 ms, while looking at all 1000 rows would take 10 times longer, or 1000 ms, which will be noticeable. But if only one of the columns has data of widely varying width, you could set ColOptRows=-50 (i.e. look at the first 50% of the rows) for that column, and perhaps change the default (for the other columns from 100 rows to 10 rows). That would reduce the number of cells considered from 30000 to 790, and thereby reducing the total optimization time from 1000 ms to about 27 ms. Although the length of this discussion may imply that it is very important to get the column width optimization right, keep in mind that the only downside of too little optimization is that some columns many initially be too narrow to show the widest cells without truncating, thus forcing the user to manually adjust the column width in order to see all the data. (Which can be done by either dragging the right column border, or double-clicking on it, in which case it optimizes that column considering all the rows.) On the other hand, too much optimization just wastes time, reducing responsiveness. But that isn't likely to become noticeable until you have upwards of 5000 cells to consider. ============================================================================ A-Shell Development Notes Version 5.1.1198.2 (23 Dec 2010) ============================================================================ 1. --- Compiler (475) bug fix: In /x:1 or /x:2 mode, it was failing to detect and report the following two kinds of errors: FOR I=1 TO 2 PRINT I:NEXT I ! (missing :) FOR I = 1 TO 2 ... NEXT J ! (mismatch FOR/NEXT var) 2. --- GUI bug fix: close a timing loophole which was causing the first click on a control to sometimes be ignored, if coming within 1.5 seconds of the last click on some other control. ============================================================================ A-Shell Development Notes Version 5.1.1198.1 (17 Dec 2010) ============================================================================ 1. --- ATE bug fix: close a loophole that was intermittently allowing garbage to be transmitted to the server at the end of the CTLOP_INFO operation. Typically this caused no problems, but occasionally the garbage contained control characters (like ^C) that would abort the server program. The problem has been around for a long time, but happened so rarely that it was just now noticed. (Unrelated to any of the other changes in 1198.) ============================================================================ A-Shell Development Notes Version 5.1.1198.0 (16 Dec 2010) ============================================================================ 1. --- This release consolidates various ATE/XTREE related performance optimizations ` introduced since 1197.0, which require both sides (server and client) to be at least at this level to take advantage of. (If either side is lower, then the optimization is not activated.) 2. --- Windows GDI printing bug fix: The %# (total pages) macro was being fooled by a trailing FF character into adding an extra page to the total, even in cases where the FF would have been removed by subsequent processing. This was mainly noticeable in AUXLOC: printing, but possibly other scenarios as well. 3. --- (Linux version) TLS support reinstated (after being inadvertently turned off for the last few versions). 4. --- XTREE enhancement: A new flag, XTF2_NORESPONSE, may be specified to eliminate the return of any response information for a particular XTREE call. This is purely of interest in the ATE environment as a performance enhancement (since the return of response information causes the application to have to wait for the network turnaround time, which is small but adds up.) In order to be effective, it must be used along with the XTF_NOSEL flag (which is used when you want to display some data without waiting for a user section or editing action). Warning: don't use it along with XTR'CTLNO = -1, since in that case you won't get back the updated tree control number, which could make it difficult to reference the tree on subsequent calls. ============================================================================ A-Shell Development Notes Version 5.1.1197.6 (15 Dec 2010) ============================================================================ 1. --- File hook bug fix: HFF_DATA_WAS flag was not working with ISAM 1.x. A new sample hook program, FHOOKTST3.BP has been added to the SOSLIB to demo/test ISAM hooks. 2. --- File hook bug fix: The "was" data (prior contents of the record) being passed to the hook was essentially garbage, except for the first null byte, when no such data was available to pass. (This occurs when the last record read prior to the write was a different record #, or there is some other problem making that data unavailable.) Now the buffer will be full of nulls. (See next item below.) 3. --- File hook refinement: When there is no "was" data available to pass to the hook routine (in response to the HFF_DATA_WAS flag), A-Shell now sets a new flag, HFF_DATA_WAS_NA (&h00010000) in the flags field in the hook environment structure passed to the hook routine. This allows the hook routine to distinguish between an empty prior record and unknown prior record contents. (The prior contents of the record can only be supplied to the hook routine if the last record # read is the same record # being written.) ASHINC:HOOK.DEF has been updated with the new flag, and the sample hook routine FHOOK1.BP (SBX) has been updated to show testing the flag. 4. --- PDX Email Type 4 bug fix: ashnet.dll 1.3.121 fixes a problem in which the port you specified in the //PDFX,Email.SMTP.Port command was effectively ignored (causing it to try the default port 25 instead). Also, very long messages (displayed in the debug message window for failed connections) were being truncated after 2048 bytes (not enough for some servers when using SSL connections), thus preventing you from seeing what the actual error preventing the connection was. (This limitation was in A-Shell itself, not in ashnet.dll.) ============================================================================ A-Shell Development Notes Version 5.1.1197.3 (09 Dec 2010) ============================================================================ 1. --- XTREE bug fix: Various problems related to the recent optimization which avoids re-processing the coldef when it hasn't changed have been resolved. 2. --- Combobox refinement: The built-in search mechanism (that stopped on the first match) has been replaced with a smarter routine which locates the best match first. (This fixes an issue whereby a field containing, say, "Jeans" might match an entry in the list containing "Jeans / Baggy" if that entry appeared before the plain "Jeans" entry.) This affects both INFLD and XTREE comboboxes. 3. --- XTREE bug fix: Filter out late-arriving messages for trees that have just exited from XTREE control. These were previously being mis-handled as inactive click messages, which was often interfering with the application's intent when re-entering the tree. ============================================================================ A-Shell Development Notes Version 5.1.1197.1 (07 Dec 2010) ============================================================================ 1. --- Context menu bug fix: Clicking on context menu options attached to dialogs was sometimes having no apparent effect. 2. --- AG_WINEXEC bug fix: When using the $COPY and $MOVE macros, the FLAGS argument was being ignored (making it impossible to overwrite existing destination files.) 3. --- COM interface refinement: Accented characters may now be passed to COM subroutines as string parameters. Previously, only 7-bit characters were being properly marshalled across the COM interface. This was preventing FTPDLX.SBR and ATE/FTP transfers from working with files containing accented characters in the path or filename. ============================================================================ A-Shell Development Notes Version 5.1.1197.0 (03 Dec 2010) ============================================================================ 1. --- VUE bug fix (306) - The >YANK command was reporting lines too long (and showing them padded with @@@@. (Bug introduced in 1196.6.) 2. --- AIX refinement: Implement the same patch for AIX as was described for Linux in edit 1192.6 below. 3. --- XTREE bug fix: close a loophole in which it was possible, when clicking rapidly between two XTREEs, for the user focus and the application focus to get separated. 4. --- XTREE bug fix: right-clicking on an inactive tree was potentially returning a negative (i.e. high binary) value for xtr'targetrow. 5. --- XTREE bug fix: close a loophole in which clicking out of an XTREE on the dropdown button of a combo was resulting in a second, delayed, exitcode for the combo, such that the next control to get the focus after the combo would immediately exit as if the combo had been clicked again. 6. --- XTREE enhancement: It is now possible to control whether the +/- buttons (used with multi-level mode to expand/contract levels) are visible or not. Previously, although the documentation suggested that the xtr'showbuttons0 and xtr'showbuttons fields controlled this, the fields were ignored and the buttons were always made visible. The interpretation of the two fields has been upgraded to preserve compatibility with existing programs but to now allow the application to hide the top level or lower level buttons, if desired. The field meanings: - xtr'showbuttons0 is no longer used (i.e. ignored as before but now officially so. - xtr'showbuttons: 0 or 1 = show the buttons +2 (XTSBF_HIDE0) causes the top level buttons to be hidden +4 (XTSBF_HIDE) causes the lower level buttons to be hidden The new symbols and updated comments are in the XTREE.DEF, XTREE.MAP, and XTREE.SDF files. ============================================================================ A-Shell Development Notes Version 5.1.1196.7 (29 Nov 2010) ============================================================================ 1. --- EVENTWAIT bug fix: Control+UpArrow stopped working (i.e.,failed to generate exitcode -53 when the EVW_CTLARROW+EVW_VAREXIT flags were set), around edit 1192 (as a side effect of implementing scroll-back). 2. --- XTREE bug fix: In some cases, simple selection trees were not returning the selected row upon double-click or ENTER. (Problem introduced in 1196.x) 3. --- XTREE bug fix: Re-entering a tree in edit mode was often resulting in the tree starting in selection mode instead. (Problem introduced in 1196.x) ============================================================================ A-Shell Development Notes Version 5.1.1196.6 (28 Nov 2010) ============================================================================ 1. --- VUE bug fix (edit 303): moving the cursor past lines which exceeded 2022 bytes was causing VUE to crash. 2. --- VUE enhancement (edit 304): The old line length limit of 2022 bytes has been greatly expanded. For existing files, the new limit is 1000 bytes longer than the longest of the first 100 lines in the file. For new files, the limit is 4K. Also, the line concatenation function (^O) now beeps and otherwise does nothing when the concatenated line would exceed the current limit. (Previously it just truncated without warning.) 3. --- VUE enhancement (edit 305): A new variation of the >FORMAT command allows reformatting (wrapping) one line at a time to a specified width: >FORMAT # (where # is the desired wrap width). Unlike the standard FORMAT command, which reformats a paragraph using word wrap so that each line is as long as possible without exceeding the current width specified by the WIDTH command, FORMAT # operates on only the current line, wrapping it at exactly the specified width. This is mostly just a convenience for getting an overview of an extremely long line (as an alternative to successively using the >MARGIN # command, or right arrow, to view one screen width at a time). 4. --- ASHLOG (log file) bug fix: Eliminate the main cause for the log file appearing in the %TEMP% directory rather than the %MIAME% directory (or the directory specified by the LOGDIR= command in the MIAME.INI). This was occurring when the %MIAME% directory contained a space. 5. --- COMPIL (edit 473) bug fix: Using a ++extern'd variable for an array subscript within a procedure was generating a bogus unmapped variable error. Problem was introduced in compiler edit 466 or 467. =========================================================================== A-Shell Development Notes Version 5.1.1196.5 (24 Nov 2010) ============================================================================ 1. --- ATE / ATSD bug fix: specifying any of the login parameters (name, password, and/or additional text) was causing ATE to lock up during connection to an ATSD server. Now you may specify arbitrary text commands, either in the name and password fields, or, preferably, just using the additional text field and leaving the name & password fields blank. 2. --- XTREE refinement: When saving/restoring both the font scale (XTUCFG_FONT) and the column widths (XTUCFG_COLWID), the saved column widths were being overridden by column optimization after the saved font size was applied. Now the column widths are preserved when the tree is recreated. But, any subsequent user adjustment to the font scale (using Ctrl +/- or the $SCALE+, $SCALE- or $RESETSCALE PopupMenu options) will re-optimize the columns. (So if you want to adjust both the scale and the column widths, first adjust the scale, then the columns widths.) 3. --- XTREE bug fix: Calling XTREE or PCKLST without using XTF_COLDFX was crashing A-Shell (problem introduced in 1196). ------------- Note: 1196.1 thru 1196.4 were unofficial test versions so do not have any formal notes. ------------- ============================================================================ A-Shell Development Notes Version 5.1.1196.0 (12 Nov 2010) ============================================================================ 1. --- AUI_CONTROL / ATE performance enhancement: A new AUI_ENVIRONMENT flag, (AGF_NOSTATUS = &h02000) may be set to disable the return of cstatus information from AUI_CONTROL CTLOP_ADD operations. This may be useful in programs which contain many individual AUI_CONTROL calls but where you don't care about the return status (and don't need to reference the control IDs, or are using alphanumeric IDs). This is equivalent to specifying NUL_CSTATUS (or "") for the cstatus parameter in each call, so it is mainly useful when you have a lot of code doesn't take that refinement into account (perhaps because it was originally written for a local Windows environment where there is no performance penalty for returning the status). Use XCALL AUI, AUI_ENVIRONMENT with opcode 1 to set this flag. It remains set for the duration of the session, or until specifically reset. Note that this is purely a server-side enhancement. 2. --- Performance refinement for TAB controls containing XTREE and XTEXT controls: This is primarily an ATE refinement, but could also apply to local Windows environments where you have large XTREE or XTEXT controls within TABs. The idea is to avoid deleting and recreating the XTREE or XTEXT control when switching from one TAB pane to another, by just hiding the XTREE/XTEXT control and later reactivating it rather than recreating it. Normally, the procedure for switching between TABs is to use CTLOP_CLR with the TAB's control ID to clear all of the controls on the pane before switching to the new pane and recreating all the controls for that pane. Destroying and recreating controls is usually just as fast as hiding/restoring them. But in the case of very large and complex controls, like XTREE and XTEXT, and especially in the ATE environment (where a lot of data must be sent from the server to the client to create and load the control), it would be more efficient to just make those controls disappear when switching to another pane, and then make them reappear when switching back to the pane containing them. To accomplish that, you may now specify the code "!XT" (meant to suggest no XTREE or XTEXT) in the Txt parameter of the CTLOP_CLR call, e.g.: xcall AUI, AUI_CONTROL, CTLOP_CLR, TABID, "!XT" This causes any XTREE or XTEXT controls on the current TAB pane to be merely hidden instead of deleted. Later, when you switch back to the pane containing the XTREE or XTEXT control(s), you just need to use CTLOP_CHG with the MBST_ENABLE and MBST_SHOW cstate flags to redisplay the control, rather than recreating it. As a practical matter, to do this robustly, you will need the ctlid of the XTREE and/or XTEXT controls, which you would have from the xtr'ctlid and/or txc'ctlid parameters of the respecting routines. (This assumes you are saving the xtrctl and/or txtctl parameter blocks for each XTREE/XTEXT control separately.) If the ctlid parameter is non-zero, that implies that you must have previously created the control, and thus you may be able to just redisplay it with CTLOP_CHG. The returned cstatus value from the CTLOP_CHG operation will be >=0 if it succeeds, else it failed and you'll need to recreate the control. For example: if XTR'CTLID > 0 then xcall AUI, AUI_CONTROL, CTLOP_CHG, XTR'CTLID, NUL_CTEXT$, & MBST_ENABLE+MBST_SHOW, NUL_CMD$, NUL_FUNC$, CSTATUS else CSTATUS = -1 endif if CSTATUS < 0 then ! we failed to redisplay the XTREE so recreate it ... endif Note: this is a client-side enhancement. (If an app tries to use the feature in an older client that doesn't support it, the CSTATUS parameter will indicate an error and you'll be able to recreate the control as before.) 3. --- XTREE bug fix: The row and header fonts were sometimes getting mixed up when manipulating the font scaling and/or replacing trees. 4. --- XTREE enhancement: A new optional parameter, xinfo, may be specified to allow XTREE to return additional information: xcall XTREE, srow, scol, answer, array, cnt, coldef, exitcode, erow, & ecol, flags, file, mmoclr, xtrctl, filidx, xinfo xinfo must be mapped as a string (fixed or dynamic). Note that if not using filidx, you may specify "" as a placeholder for it. Currently, the only information returned in xinfo is a list of multiple exitcodes that apply to the tree just exited (primarily useful in trees where a single event might logically be associated with more than one exitcode). The format is as follows: 0,exitcode1,exitcode2,exitcode3,...,exitcodeN e.g. 0,-48,-902 The first byte ("0" in the above case) indicates the format of the remainder of the string. So in order to allow programs to avoid confusion when the format of this string gets updated in the future, it should do something like this: if xinfo[1,1] = "0" then else endif To give an example of where multiple exitcodes might be handy, consider the case of an editable tree that also contains PopupMenu exitcodes. While editing a cell, the user may decide to right-click to see the popup menu, and then select one of the options that generates an exitcode. In this case, you may effectively have two exitcodes: one for cell validation (-48) and one for the PopupMenu selection. In this case, the validation exitcode would probably take precedence as the one returned in the main exitcode parameter. Previously, the other events would have gone without notice. Now, if the xinfo parameter is specified, the other exiticode(s) will be passed back in it, allowing the application to respond appropriately to the multiple events. 5. --- XTREE refinement for handling clicks on inactive trees: When the user clicks on an inactive XTREE, it creates potential complications for the application. Typically, the xtr'kbdstr parameter of the inactive xtree will be used to generate an exitcode indicating which control was clicked, and the control currently with the focus will exit with that exitcode. The application would then typically call XTREE for the clicked-on tree. The complications arise when the click event has (or should have) more consequences than simply putting the focus on that XTREE. For example, if the target tree uses SelChgExit or ClickExit, the click event might logically need to trigger one or both of those exitcodes. In the case of a right-click, if there was a context menu defined, the user would expect it to appear (in addition to the tree getting the focus). The act of clicking on the inactive tree might also have ramifications for the control that previously had the focus, perhaps INFLD or even another XTREE. For example, in either of those cases, exit validation may be needed, which could potentially put the application the position of having to ignore the original click on the inactive tree, in order to enforce some data entry rules in the previously active tree or field. The general procedure for dealing with these complications is (and has been) as follows: a. The click on the inactive tree generates the exitcode associated with the xtr'kbdstr field for that tree. b. The currently active control (presumably being handled by an XCALL) exits with that exitcode. c. The application performs any exit validation or cleanup necessary for the field/control just exited. d. Assuming no problems so far, it then calls XTREE (probably with XTROP_RESELECT) to activate the tree just clicked on. e. Once activated, that tree should try to proceed with processing the secondary events associated with the click that occurred when the tree was inactive. For example, if it was a right-click on a column that had a PopupMenu, it should then display the context menu. Or if the click caused the selection to be moved to another row and SelChgExit was defined, then the tree should exit with the exitcode defined for the SelChgExit. If the inactive click was on a checkbox cell, the contents of the checkbox should now be toggled, and if validating, the tree should exit with exitcode -48. Etc. The refinement here is not so much a change of procedure but a review and slight cleanup to reaffirm that it actually works as just described. In addition, in the case where the inactive click could lead to multiple exitcodes, those would now be returned in the xinfo parameter (if specified). Finally, there is one new feature associated with this "refinement": A new flag, XTF2_CLRDEFER (&h0100) may be passed to tell XTREE to ignore any previous inactive click and to clear any secondary events associated with it. This would be useful in the case where the operation interrupted by the click on the inactive XTREE wasn't properly completed, causing the application to effectively ignore the inactive XTREE click. But at some point later, the application may decide to call that XTREE for other reasons, and we wouldn't want to then have to deal with the deferred effects of the original click event. Currently, inactive click events are discarded after about 2 seconds, but that is not necessarily an appropriate time period. The new flag allows for somewhat more application control. ============================================================================ A-Shell Development Notes Version 5.1.1195.0 (09 Nov 2010) ============================================================================ 1. --- COMPIL (edit 471) enhancement: 4 new shortcut operators defined: var += ! equivalent to var = var + () var -= ! equivalent to var = var - () var *= ! equivalent to var = var * () var /= ! equivalent to var = var / () These require /X:2 or /RC, but they do not have any compatibility effect on the resulting RUN module. ============================================================================ A-Shell Development Notes Version 5.1.1194.4 (05 Nov 2010) ============================================================================ 1. --- MX_WINSETTINGS refinement: Opcode 1 (set value) is now much faster (under ATE) due to the elimination of the need to wait for a response from the ATE client. 2. --- MX_WINSETTINGS / AW_WINSETTINGS refinement: Opcode 0 (get value) with id 0 now returns a comma-delimited string of all the available values. (This is much faster than retrieving each value one at a time over ATE, where there could be a several ms latency for each command/response turnaround.) Note that the comma-delimited string will have a place for each setting by ID value, from 1 to the maximum ID (currently 21). 3. --- AG_XFUNCS bug fix: SBX routines that were themselves invoking AG_xxx functions (either directly or indirectly via MX_xxx functions) were sometimes causing ATE to hang due to a conflict in handling the nesting of commands. This should be fixed now. 4. --- XTREE bug fix: A recent fix had the side effect of breaking certain XTREE exitcodes. ============================================================================ A-Shell Development Notes Version 5.1.1194.3 (04 Nov 2010) ============================================================================ 1. --- COMIO bug fix: Inputting (opcode 8) up to a specific terminating character (e.g. COUNT=-1 to input up to a CR) was having the side effect of removing all the remaining characters from the input buffer. (This was introduced in one of the recent updates.) Also, opcode 16 (write) now returns (in COUNT) the number of characters actually sent, per the documentation. ============================================================================ A-Shell Development Notes Version 5.1.1194.2 (03 Nov 2010) ============================================================================ 1. --- ATE command bug fix: Some commands with very large responses (over 2K), such as a request to retrieve clipboard data (using MX_CLIPBOARD) were leading to a buffer overflow and A-Shell crash. Note that for ATE/ATSD, the update may be required on both sides in order to close the loophole. 2. --- ATE/A-Shell Windows input buffering refinement: There was effectively a limit of 3K on the amount of input data that could be buffered by ATE before it was processed. This was interfering with some commands (both ATE when the server is Windows, and in local A-Shell/Windows) that may have needed to return more than 3K at a time. (Retrieving clipboard data with MX_CLIPBOARD was an example.) The relevant buffers are now auto-expanded. 3. --- ATE command timeout refinement: the timeout on ATE commands now auto-extends itself if data is still being transferred. This resolves a problem with premature timeout when the data is taking longer than expected to be transferred from the client, but it is still coming. ============================================================================ A-Shell Development Notes Version 5.1.1194.1 (03 Nov 2010) ============================================================================ 1. --- COMIO.SBR bug fix: Recent changes (see 1193 below) introduced a bug in which opcode 4 (check for data) was waiting indefinitely (if no data was available) when the timeout was set to 0. This makes sense for the read and write operations, but not for the check operation. It now behaves as expected. ============================================================================ A-Shell Development Notes Version 5.1.1194.0 (02 Nov 2010) ============================================================================ 1. --- XTREE enhancement: The meaning of the XTR'USRCFG flag value 2 (previously named XTUCFG_SRTORD) has been change to separate xtr'columnactive from the xtr'sortorder() and xtr'columnsort() information. This flag value (2) has been renamed (in xtree.def) to XTUCFG_COLSRT and now saves and restores only the xtr'sortorder() and xtr'columnsort() values. A new flag, XTUCFG_COLACT (value = &h0010) has been defined to save and restore the active column. To minimize the effect on existing programs, the old symbol, XTUCFG_SRTORD, has been redefined to &h0012, combining the two flag bits so as to preserve the old behavior. (So as long as you recompile your programs prior to installing this update, there will be no change at all.) If you don't recompile, any XTREEs using the XTUCFG_SRTORD flag will no longer save and restore the user's active column. (But this effect is probably too subtle for most people to even notice.) See the updated XTREE.DEF (edit 125) for the updated symbol definitions. ============================================================================ A-Shell Development Notes Version 5.1.1193.4 (02 Nov 2010) ============================================================================ 1. --- XTREE bug fix / refinement: Reorganize the code that determines the exitcode when there are multiple possibilities, to avoid conflicts caused by interaction between multiple XTREE controls. This was leading to unexpected exitcodes (like -48) when clicking on one tree while another one was active. ============================================================================ A-Shell Development Notes Version 5.1.1193.3 (01 Nov 2010) ============================================================================ 1. --- XTREE enhancement: when a call using XTF_NOSEL follows a click on the inactive tree, it now returns the location of the click in the XTR'TARGETROW and XTR'TARGETCOL fields. This is useful in the following scenario: Your program is waiting in some state other than XTREE (perhaps INFLD), but there is a visible (inactive) XTREE control on the screen. The user clicks on a cell in the XTREE. This returns the exitcode defined by XTR'KBDSTR to whatever routine is waiting on input. Your program sees that the exitcode is from clicking on the inactive XTREE, but you want to know what cell was clicked. So you call the XTREE, with opcode XTROP_RESELECT and with the XTF_NOSEL flag set (for an immediate exit). On exit, your program can get the location of the click from XTR'TARGETROW/XTR'TARGETCOL. ============================================================================ A-Shell Development Notes Version 5.1.1193.2 (01 Nov 2010) ============================================================================ 1. --- XTREE bug fix: Using XTROP_DELSEL with a tree containing editable cells was often scrambling the editable cell data in rows following the last row marked as deleted. ============================================================================ A-Shell Development Notes Version 5.1.1193.1 (31 Oct 2010) ============================================================================ 1. --- MAXLOCKS bug fix: The MIAME.INI statement MAXLOCKS=### was effectively being ignored, making it impossible to increase the default number of simultaneous locks (100). =========================================================================== A-Shell Development Notes Version 5.1.1193.0 (28 Oct 2010) ============================================================================ 1. --- Compiler (edit 467) / Runtime refinement: STATIC DIMX statements were not acting like other STATIC MAP statements in only executing once. Instead you had to use another static variable to maintain a flag, or some other mechanism, to avoid trying to execute the statement a second time (which would have caused a Basic error). 2. --- Compiler enhancement (edit 468): It is now possible to use the sizeof(var) compiler function to reference the size of the immediately preceding var even when it is a structure. Previously, this generated a "variable size not yet finalized" compile error, requiring the insertion of a variable in between the preceding var and the one using the sizeof(var) expression. 3. --- Compiler enhancement (edit 469): Local non-static DIMX statements are now fully cleaned up on exit from the function or procedure. Previously, the variable descriptor was removed (along with all of the other local stack variables), but the memory handle and allocation remained in effect. With this enhancement, it is no longer necessary to use REDIMX(0...) to "undimx" any DIMX'd arrays at the end of the function. (But it doesn't hurt to perform that step redundantly.) Note that this is purely a compiler adjustement not a runtime fix. 4. --- W2000 compatibility has been restored. (It was lost when we switched to the VS2010 compiler, a few versions back.) 5. --- (Windows/ATE) TAB(-1,49) (solid block), TAB(-1,50) (slant-hashed block), and TAB(-1,51) (crosshatch block) were not displaying properly except with the MIAME Terminal font. 6. --- COMIO.SBR fixes/refinements: - The timeout feature was not working at all in the read mode except when waiting on a specific terminating character. The timeout value was also being switched to approximately 6 seconds in many cases, despite the value passed. - The timeout feature now works in opcode 4 (check for characters), as well as in all variations of opcode 8 (input). - Internal timer intervals within the send and receive routines were reduced from 1 second to 1/10 second, reducing the latency of send and receive operations. ============================================================================ A-Shell Development Notes Version 5.1.1192.6 (20 Oct 2010) ============================================================================ 1. --- (Linux) Workaround an apparent bug in the memory copy (memcpy) library routine in one Ubuntu installation, which had the effect of corrupting some string concatenation operations. (The character at the start or end of one of the operands would sometimes be replicated into the adjacent byte, in maybe 5% of the cases, presumably based on some kind of alignment factors.) The workaround substitutes a different memory copy routine (memmove), which is slightly less optimized in order to handle overlapping regions (which shouldn't have been a factor in this case, but apparently the decreased optimization eliminated the problem). There is a slight performance penalty associated with this change (string intensive operations appear to be about 2% slower), but at least for now, that seems like an acceptable trade-off to avoid a potentially devastating data corruption bug that, although rare, we otherwise seem to have no easy way of detecting or preventing. 2. --- (Windows ATSD) MSGBOX.SBR bug fix: The text mode version of the message box (used when connecting to ATSD from a non-ATE emulator) was not displaying the proper message text. ============================================================================ A-Shell Development Notes Version 5.1.1192.4 (24 Sep 2010) ============================================================================ 1. --- A-Shell/Windows/ATE packaging fix: APEX got broken in 5.1.1192 due to a licensing mixup created when moving the development to Visual Studio 2010 from VS 2008. It is now fixed. WARNING: At the same time, backwards compatibility with W2000 was lost. (Ashw32.exe reports "not a valid WIN32 application".) This problem is still under study. ============================================================================ A-Shell Development Notes Version 5.1.1192.3 (23 Sep 2010) ============================================================================ 1. --- ATSD / XTEXT (server side) bug fix: The text was not being returned when using buffer mode (txc'dstfmt = 0). ============================================================================ A-Shell Development Notes Version 5.1.1192.2 (23 Sep 2010) ============================================================================ 1. --- AUI_CONTROL refinement: When creating a modal dialog, if the application is currently in background, it now takes additional steps to remain in background. Previously, the act of creating a dialog while in background was likely to cause a shuffling of the window order, often ending up with the dialog's parent window displaying on top of both the new dialog and the currently active window. 2. --- New AG command AG_ISFOREGROUND (78) to test whether the current instance of A-Shell (or the ATE client) has foreground status (i.e. is the active app): ? tab(-10,AG_ISFOREGROUND);chr(127); input "",FG Returns 1 if in foreground, else 0. Note that as a practical matter (to eliminate the need for an INPUT statement), you'll probably want to call this via the MX_AGWRAPPER command: MAP1 IS'FG,B,1 xcall MIAMEX, MX_AGWRAPPER, AG_ISFOREGROUND, "", IS'FG ============================================================================ A-Shell Development Notes Version 5.1.1192.1 (22 Sep 2010) ============================================================================ 1. --- Compiler bug fix (edit 467): STATIC DIMX now works as expected within a function or procedure. Previously, it ignored the STATIC. But due to a quirk which was removed in 1190 when the DIMX issues with SBX recursion were resolved, it acted as if static at runtime. Between 1190 and 1192, even STATIC DIMX acted like DIMX. Now they both act as expected. (Note that you are still responsible for cleaning up unwanted DIMX allocations made within a function.) 2. --- Dynamic memory bug fix: close a loophole causing a bogus out of memory error when a memory pool had to be moved in the middle of a deeply nested function specified within an assignment statement whose destination variable was also a dynamic variable sharing the same (deeply nested) memory pool. 3. --- Runtime enhancement to array AUTO_EXTEND feature: References to elements of DIMX/AUTO_EXTEND arrays within XCALL, FUNCTION, PROCEDURE calling parameter lists, as well as in INPUT statements, now trigger auto-extension of the array if required. Previously, auto-extension only occurred when the array element was referenced on the left side of an assignment. The new behavior is useful in cases where the parameter will be updatd by the routine being called (thus making the operation similar to an assignment). ============================================================================ A-Shell Development Notes Version 5.1.1192.0 (21 Sep 2010) ============================================================================ 1. --- COMPILER enhancement (edit 462): Functions and procedures may now contain a special label "$EXIT:" which the EXITPROCEDURE and EXITFUNCTION statements will effectively jump to. This allows you to insert code into the function/procedure that will always be executed at the end of the routine, even if the routine is terminated with the EXITPROCEDURE or EXITFUNCTION statement. For example: PROCEDURE TEST() DIMX A(100),S,50 ... IF =N) PRINT .EXTENT(ARY(),2) ! extend of 2nd dimension (5) PRINT .EXTENT(ARY(),3) ! extend of 3rd dimension (25) PRINT .EXTENT(ARY(),4) ! extend of 4th dimension (-1 for error) The above program will output predictable values - 5 and 25 for the extent of the 2nd and 3rd dimensions, since those are fixed in the array definition. But the extent of the first dimension will depend on the AUTO_EXTEND activity. For example, if N = 75, the returned value might be 85 (since when arrays are auto-extended, they are extended somewhat beyond the minimum size needed at the time, in order to minimize the need for subsequent auto-extensions). For an invalid dimension (4 in the example above), or for an array that has not yet been DIMXed (or has been un-dimensioned), the return value is -1. (This last fact eliminates the need to maintain a static flag variable indicating whether a particular dynamic array has been DIMX'd yet, as was sometimes necessary previously.) 4. --- COMPILER (edit 465) and corresponding RUNTIME enhancement: Support a new "dynamic overlay" mechanism. This is similar to the standard static overlay mechanism supported since "the beginning", except that the overlay is activated at runtime. Its primary initial use to be able to overlay a dynamic array with an X variable so that it can be passed as a parameter to subroutines. Eventually it might also be incorporated into a "pass by reference" capability. There are two steps involved in creating a dynamic overlay: - Declare the overlay variable using the special ,@0 overlay syntax, e.g.: MAP1 OVERLAY,X,@0 Note that the size field is optional but ignored, and only S and X variables are allowed. (In most cases, only X makes sense; use S-type overlays only when you are sure that the target variable contains no embedded null bytes.) - Assign the overlay at runtime using the "=@" operator, e.g.: OVERLAY =@ VAR ! or, OVERLAY = @VAR (spaces are not significant) This effectively gives the OVERLAY variable the same data storage location and size as the VAR variable. AS mentioned above, the main motivation is to do this with dynamic arrays, e.g.: DIMX DYNARY(x,y,z),S,n ... OVERLAY =@ DYNARY() Note that you may NOT specify any array subscripts for the array on the right side of the @= operator, since this technique is currently only supported to overlay the ENTIRE array. There is currently no corresponding operation to overlay a dynamic array on top of an X variable (which admittedly might be handy when passing such an array between routines via parameter lists). But you can get around that limitation using the technique in the following example, which passes a dynamic array to a procedure for processing: DIMX ARY(X),S,Y MAP1 OVL,X,@0 ... ... OVL = @ARY() ! overlay the array with the XARY variable CALL MYPROC(OVL,X,Y) ! pass array plus its dimensions to a function ... ! (our ARY() may have been updated by the MYPROC() procedure) END !----------------- PROCEDURE MYPROC(XXARY AS X0, ELEMENTS AS F, WIDTH AS F) DIMX LOCARY(ELEMENTS),S,WIDTH ! alloc local array to match array passed in MAP1 LOCOVL,X,@0 MAP1 I,F LOCOVL =@ LOCARY() ! overlay the local (currently empty) array LOCOVL = XXARY ! now copy the data on top of that FOR I = 1 TO ELEMENTS NEXT I XPUTARG 1,LOCOVL ! update caller's overlay (which is the same as ! caller's actual array) with the local array data ENDPROCEDURE 5. --- SQL.SBR parameter passing adjustment: A change has been made in the way that F4 parameters are passed, allowing them to be used in prepared statements. *** WARNING: this change breaks the prior ability to fetch a field directly into an F4 variable (using SQLOP_FETCH_ROW) using the 1.3 connectors. So if you use that capability, you must upgrade to the 1.4 connectors at the same time that you update to A-Shell 5.1.1192.0 *** 6. --- AUI_CONTROL enhancement: Support the new "Command Link" button style (introduced in Vista). Command Link buttons are typically rather large and contain three sub-components: - Main Text: a short text string comparable to the normal button text. - Secondary Text: a longer text string with additional explanation of what the button does. This string appears in a smaller font beneath the Main Text. - An icon: either the default green arrow pointing to the right, or a custom icon you specify. The icon appears at the left side of the button. See http://msdn.microsoft.com/en-us/library/aa511455.aspx for examples and usage guidelines provided by Microsoft. Command Link buttons are distinguished from regular buttons in AUI_CONTROL purely by the syntax of the ctext parameter, which must be as follows: ctext = maintext$ + "|" + secondarytext$ + "~" {+ iconspec$} The iconspec$ can be a .bmp file, a .ico file (with the standard search path, which includes the %MIAME%\icons directory), or an iconname::dllname spec. It may also be omitted (to use the default icon), but the tilde must then be the last character in the ctext string. Do not specify the MBF_ICON or MBF_BITMAP flags. The icon or bitmap will be displayed at the larger of 16x16, 32x32 or 48x48, depending on how tall the button is. If the Command Link button style is not supported by the version of Windows (i.e. prior to Vista), then the iconspec will be ignored, and the "|" will be converted to a chr(13) and the MBF_WRAP flag turned on, so as to display the secondarytext$ below the maintext$. (So the button will still appear at least functional, if not beautiful.) See the sample program CMDLINK.BP in [908,51] of the SOSLIB for an example. 7. --- AUI_CONTROL enhancement: Starting with Windows Vista and above, you can now add an icon or bitmap to any button. The concept is similar to the Command Link button just described, except without the secondary text (and thus may be suitable for more "normal" sized buttons.) As with Command Link buttons, they are requested purely by means of the syntax of the ctext parameter contents, which must be: ctext = text$ + "~" + iconspec$ The syntax options for iconspec$ are the same as for Command Link buttons. If the version of Windows does not support the feature, the iconspec$ will just be ignored. Note that as with the Command Link buttons, the image displays on the left of the text. But here the image is allocated the entire left half of the button, while the text gets the right half. And the right side of the image will be adjacent to the left edge of the text. If you prefer some spacing between them, add space(s) to both ends of the text$ string. (The leading space provides the separate with from the image, but the trailing space will help maintain centering of the text within the button if the image option is not supported.) See the sample program IMGTXTBTN.BP in [908,51] of the SOSLIB for an example. ============================================================================ A-Shell Development Notes Version 5.1.1191.6 (14 Sep 2010) ============================================================================ 1. --- XDATE.SBR bug fix: An input date missing the first field (e.g. '/12/10') was resulting in a bogus return date. Now it is flagged as invalid. 2. --- Top status line bug fix for TAB(-1,63) - problem intoduced in 1191.3 was causing messages intended to start in column 1 of the status line to appear at the current cursor location instead. 3. --- EVENTWAIT bug fix: TABbing from control to control wasn't working properly (broken somewhere after 1191.0). ============================================================================ A-Shell Development Notes Version 5.1.1191.5 (09 Sep 2010) ============================================================================ 1. --- INFLD bug fix: rubout in auto-complete mode was not exiting for refresh of the list data if the field contents matched the first item in the list. 2. --- ATE function key handling bug fix: use of function keys (and GUI objects with VK_F# clickstrings) was in some cases not resulting in the expected (exitcode) result. One example: INFLD with auto-complete list data showing. Note: problem did not affect clickable objects which used the "extended function key coding", i.e. "VK_xF###" ============================================================================ A-Shell Development Notes Version 5.1.1191.4 (01 Sep 2010) ============================================================================ 1. --- MX_FINDNEXT refinement: test for common mistake of including the first argument from the MX_FINDFIRST call. 2. --- SORTIT refinement: minor improvement in the parameter error reporting. ============================================================================ 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 default 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: MBF2_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 superceded by 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: qITCH=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 A-Shell/Linux includes the library within the executable module. As of this moment, the AIX version is not yet ready, but will be included in the A-Shell executable, as it is with the generic Linux version. For details on the syntax of regular expressions, see the Perl Regular Expression documentation at http://perldoc.perl.org/perlre.html, or any number of web sites which offer tutorials and examples. The two most common uses of regular expressions are to extend the power and flexibility of string searches, and to check for valid syntax in a string. The main downsides of regular expressions is that they are rather cryptic and can become so complex as to consume massive computing resources (although that is generally not an issue for common usage). As an example, a regular expression to match a valid email address word-delimited within a larger string, is: "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b" While it may be doubtful that many users would be able to conjure up such an expression during an ad-hoc search, application developers may build up a collection of useful regular expressions (often you can just copy them from helpful websites devoted to the subject) that can be used for common search or validation purposes. Regular expression processing internally consists of two separate operations: - compiling the expression (checking for syntax errors) - using the expression to match against subject string(s). Because the operation of compiling the expression can be CPU intensive as matching it against subject strings, both REGEX.SBR and INSTREX() support means of reusing previously compiled expressions. In the default case, if the current pattern matches the previously used one, then the previous compilation will be used automatically. This strategy works well when applying a single expression repetitively against many subject strings (as when searching for a pattern in a text file). But it doesn't work so well if you are searching through a file or database and comparing each line/record against more than one regular expression. To maximize efficiency in such cases, as well as for cases where you have a collection of common patterns used throughout your application, you can precompile and store up to 20 patterns, which can then be used on demand without having to re-compile them. Syntactical details about this are discussed with the REGEX and INSTREX routines below. Note: the original implementation of REGEX.SBR in 5.1.1100 treated a null pattern string as referring to the previously compiled pattern. This mechanism has been dropped, since it is somewhat confusing to implement at the application level, and also introduces the problem of having to specifically check for null patterns. The new implementation just compares the current pattern to the last one (for non-precompiled patterns) to determine when recompilation can be avoided). Null patterns return 0 (failed match) in all cases. The specific syntax and semantics of the REGEX.SBR and INSTREX() are dealt with separately below. LICENSE NOTES: PCRE is covered under the BSD license, which requires the following notes be included in the documentation included with A-Shell: Written by: Philip Hazel Email local part: ph10 Email domain: cam.ac.uk University of Cambridge Computing Service, Cambridge, England. Copyright (c) 1997-2008 University of Cambridge All rights reserved. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SAMPLES: See the sample programs in [908,46] of the SOSLIB. 2. --- New subroutine for regular expression matching: REGEX.SBR (Note: the parameters have and semantics have been slightly changed since the original introduction of REGEX.SBR in 5.1.1100, so please re-read.) Syntax: (Pre-compiling only) XCALL REGEX, PATTERN, PATNO (General use) XCALL REGEX, PATTERN, STATUS, SUBJECT {, FLAGS, STPOS, MATCH1, & SUBCNT, ... MATCHN} Where: PATTERN (string, in) Regular expression (without the Perl-style leading/trailing slash). To specify a pre-compiled pattern, set PATTERN = chr$(1) thru chr$(20) (for the 20 precompiled patterns). STATUS (f or i, out) Return codes (>0=match, 0=no match, <0=error, see below for more details) PATNO (f or i, in/out) For precompiling, on input must be set to an integer 1-20 (for the 20 numbered precompiled patterns). On output, will still be set to the same value for success, or <=0 on error (see STATUS codes below). SUBJECT (string, in) Subject string to test against the pattern FLAGS (f or b4, in) Optional flags (see below) STPOS (num, in) Optional starting position in SUBJECT, base 1. If not specified or zero, treated same as 1 (i.e. start at beginning of SUBJECT). MATCH1 (string, out) Returns the string within the SUBJECT that was matched. On errors, it may returns the text of the error description. SUBCNT (num, out) Returns # of subexpression matches. (This is an advanced feature of regular expressions; see MATCHn params and refer to the literature on the web for more information.) MATCHn (string, out) These return subexpression matches (up to the number specified by SUBCNT). Note that currently there is an internal limit of 20 subexpression matches. If you pattern is more complex than that, it will likely fail. RETURNED STATUS VALUES: >0 Matching success (# of matches) -99 Too few params -98 Unable to load PCRE library (PCRE3.DLL under Windows) -97 Unable to allocate memory for library -96 Unable to link to pcre_compil2 or pcre_exit function in lib -95 Invalid pre-compiled pattern number (1-20) -94 No such precompiled pattern (not previously compiled) Pattern compilation errors: -101 \ at end of pattern -102 \c at end of pattern -103 unrecognized character follows \ -104 numbers out of order in {} quantifier -105 number too big in {} quantifier -106 missing terminating ] for character class -107 invalid escape sequence in character class -108 range out of order in character class -109 nothing to repeat -110 [this code is not in use] -111 internal error: unexpected repeat -112 unrecognized character after (? -113 POSIX named classes are supported only within a class -114 missing ) -115 reference to non-existent subpattern -116 erroffset passed as NULL -117 unknown option bit(s) set -118 missing ) after comment -119 [this code is not in use] -120 regular expression too large -121 failed to get memory -122 unmatched parentheses -123 internal error: code overflow -124 unrecognized character after (?< -125 lookbehind assertion is not fixed length -126 malformed number or name after (?( -127 conditional group contains more than two branches -128 assertion expected after (?( -129 (?R or (?[+-]digits must be followed by ) -130 unknown POSIX class name -131 POSIX collating elements are not supported -132 this version of PCRE is not compiled with PCRE_UTF8 support -133 [this code is not in use] -134 character value in \x{...} sequence is too large -135 invalid condition (?(0) -136 \C not allowed in lookbehind assertion -137 PCRE does not support \L, \l, \N, \U, or \u -138 number after (?C is > 255 -139 closing ) for (?C expected -140 recursive call could loop indefinitely -141 unrecognized character after (?P -142 syntax error in subpattern name (missing terminator) -143 two named subpatterns have the same name -144 invalid UTF-8 string -145 support for \P, \p, and \X has not been compiled -146 malformed \P or \p sequence -147 unknown property name after \P or \p -148 subpattern name is too long (maximum 32 characters) -149 too many named subpatterns (maximum 10,000) -150 [this code is not in use] -151 octal value is greater than \377 (not in UTF-8 mode) -152 internal error: overran compiling workspace -153 internal error: previously-checked referenced subpattern not found -154 DEFINE group contains more than one branch -155 repeating a DEFINE group is not allowed -156 inconsistent NEWLINE options -157 \g is not followed by a braced name or an optionally braced non-zero number -158 (?+ or (?- or (?(+ or (?(- must be followed by a non-zero number Matching errors: -2 (Internal error) ovector was NULL and ovecsize was not zero. -3 An unrecognized bit was set in the options argument. -4 PCRE stores a 4-byte "magic number" at the start of the compiled code, to catch the case when it is passed a junk pointer and to detect when a pattern that was compiled in an environment of one endianness is run in an environment with the other endianness. This is the error that PCRE gives when the magic number is not present. -5 While running the pattern match, an unknown item was encountered in the compiled pattern. This error could be caused by a bug in PCRE or by overwriting of the compiled pattern. -6 If a pattern contains back references, but the ovector that is passed to pcre_exec() is not big enough to remember the referenced substrings, PCRE gets a block of memory at the start of matching to use for this purpose. If the call via pcre_malloc() fails, this error is given. The memory is automatically freed at the end of matching. -7 This error is used by the pcre_copy_substring(), pcre_get_substring(), and pcre_get_substring_list() functions (see below). It is never returned by pcre_exec(). -8 The backtracking limit, as specified by the match_limit field in a pcre_extra structure (or defaulted) was reached. See the description above. -9 This error is never generated by pcre_exec() itself. It is provided for use by callout functions that want to yield a distinctive error code. See the pcrecallout documentation for details. -10 A string that contains an invalid UTF-8 byte sequence was passed as a subject. -11 The UTF-8 byte sequence that was passed as a subject was valid, but the value of startoffset did not point to the beginning of a UTF-8 charac- ter. -12 The subject string did not match, but it did match partially. See the pcrepartial documentation for details of partial matching. -13 The PCRE_PARTIAL option was used with a compiled pattern containing items that are not supported for partial matching. See the pcrepartial documentation for details of partial matching. -14 An unexpected internal error has occurred. This error could be caused by a bug in PCRE or by overwriting of the compiled pattern. -15 This error is given if the value of the ovecsize argument is negative. -21 The internal recursion limit, as specified by the match_limit_recursion field in a pcre_extra structure (or defaulted) was reached. See the description above. -23 An invalid combination of PCRE_NEWLINE_xxx options was given. FLAGS values (for compiling - defined in ASHINC:REGEX.DEF) PCRE_ANCHORED (&h0010) If this bit is set, the pattern is forced to be "anchored", that is, it is constrained to match only at the first matching point in the string that is being searched (the "subject string"). This effect can also be achieved by appropriate constructs in the pattern itself, which is the only way to do it in Perl. PCRE_CASELESS (&h0001) If this bit is set, letters in the pattern match both upper and lower case letters. It is equivalent to Perl's /i option, and it can be changed within a pattern by a (?i) option setting. In UTF-8 mode, PCRE always understands the concept of case for characters whose values are less than 128, so caseless matching is always possible. For characters with higher values, the concept of case is supported if PCRE is com- piled with Unicode property support, but not otherwise. If you want to use caseless matching for characters 128 and above, you must ensure that PCRE is compiled with Unicode property support as well as with UTF-8 support. PCRE_DOLLAR_ENDONLY (&h0020) If this bit is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this option, a dollar also matches immediately before a newline at the end of the string (but not before any other newlines). The PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is set. There is no equivalent to this option in Perl, and no way to set it within a pattern. PCRE_DOTALL (&h0004) If this bit is set, a dot metacharater in the pattern matches all char- acters, including those that indicate newline. Without it, a dot does not match when the current position is at a newline. This option is equivalent to Perl's /s option, and it can be changed within a pattern by a (?s) option setting. A negative class such as [^a] always matches newline characters, independent of the setting of this option. PCRE_EXTENDED (&h0008) If this bit is set, whitespace data characters in the pattern are totally ignored except when escaped or inside a character class. White- space does not include the VT character (code 11). In addition, charac- ters between an unescaped # outside a character class and the next new- line, inclusive, are also ignored. This is equivalent to Perl's /x option, and it can be changed within a pattern by a (?x) option set- ting. This option makes it possible to include comments inside complicated patterns. Note, however, that this applies only to data characters. Whitespace characters may never appear within special character sequences in a pattern, for example within the sequence (?( which introduces a conditional subpattern. PCRE_MULTILINE (&h0002) By default, PCRE treats the subject string as consisting of a single line of characters (even if it actually contains newlines). The "start of line" metacharacter (^) matches only at the start of the string, while the "end of line" metacharacter ($) matches only at the end of the string, or before a terminating newline (unless PCRE_DOLLAR_ENDONLY is set). This is the same as Perl. PCRE_UNGREEDY (&h0200) This option inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by "?". It is not compatible with Perl. It can also be set by a (?U) option setting within the pattern. PCREX_PRECOMPILE (&h80000000) This is not a standard PCRE flag (hence the prefix PCREX_). It is use with the INSTREX() function to indicate that you only want to precompile the pattern. See INSTREX() for more details. 3. --- [This item superceded by 1109.0.2] ============================================================================ A-Shell Development Notes Version 5.1.1107.4 (12 Apr 2008) ============================================================================ 1. --- New XTREE Advanced Coldef Parameter allowing control over the color used to display numeric cells with negative values: NegFgBg={fgidx{,bgidx}} Ex: NegFgBg=A NegFgBg=A,B NegFgBg= By default, the foreground color is set to Red. If the above clause is added to the real column definition, or to the Pseudo Column Zero, then the specified fgidx (and optional bgidx) codes will be used to reference previously defined RGBfg or RGBbg definitions by their index codes. For example: COLDEF = "0~0~x~H~RGBfg=50,255,80,A~RGBbg=200,60,240,B~~" & + "1~10~Amounts~#~NegFgBg=A,B~~" In the above case, the NegFgBg=A,B clause tells XTREE to display negative cells in the specified column using the foreground RGB color defined with index A (RGBfg=50,255,80,A) and the background color define with index B. If the optional {,bgidx} background color is not specified, then XTREE uses the default. If no argument is specified (i.e. NegFgBg=), then the automatic red display of negative numbers is merely disabled; in other words, negative numbers are treated just like positive numbers. 2. --- New XTREE option to override the alignment of the column headers. Normally the column header text is aligned the same way as the data in the column is (i.e. based on the last cformat field of the COLDEF parameter). You can now override this by starting the column header text with one of the three alignment characters: > (right), < (left), or | (center) followed by a space. Example: COLDEF="1~20~> Right Title~<S~~" ! text left aligned, header right (Without the space in the 2nd position of the title, the < character would have simply been treated as the start of the title text.) ============================================================================ A-Shell Development Notes Version 5.1.1107.3 (08 Apr 2008) ============================================================================ 1. --- ATE GUI bug fix: attempting to paste more than 100 charactesr into a GUI control (like INFLD or XTEXT) was sending the text instead to the host. ============================================================================ A-Shell Development Notes Version 5.1.1107.2 (02 Apr 2008) ============================================================================ 1. --- GUI bug fix: close a loophole which sometimes caused centered images using AUI_CONTROL and MBF_CENTER to loop indefinitely (i.e. hang A-Shell). ============================================================================ A-Shell Development Notes Version 5.1.1107.1 (24 Mar 2008) ============================================================================ 1. --- EZTYP cosmetic bug fix: was showing "^M" at the end of each line. ============================================================================ A-Shell Development Notes Version 5.1.1107.0 (14 Mar 2008) ============================================================================ 1. --- New "eXplicit" variations of READ and WRITE statements: XREAD #CH, RECNO, VAR {,VAR2...,VARN} XREADL #CH, RECNO, VAR {,VAR2...,VARN} XREAD'READ'ONLY #CH, RECNO, VAR {,VAR2...,VARN} XWRITE #CH, RECNO, VAR {,VAR2...,VARN} XWRITEL #CH, RECNO, VAR {,VAR2...,VARN} XWRITEN #CH, RECNO, VAR {,VAR2...,VARN} XWRITELN #CH, RECNO, VAR {,VAR2...,VARN} These are equivalent to the standard versions of these statements (without the "X" and without the RECNO variable), except that, instead of getting the record number implicitly, from the variable specified in the OPEN statement, the record number is specified, eXplicitly, in the statement. This can be advantageous in generic or parameterized implementations of file i/o, and especially in SBX routines (which otherwise need to use MX_FLSET in order to access a file that was opened outside of the SBX.) 2. --- New MX_BROWSEFOLDER (170) function for selecting a Windows folder. Similar to the MX_GETOFD, it is useful when you only want to select a folder or other non-file object (such as computer). xcall MIAMEX, MX_BROWSEFOLDER, Folder, RootID, Title, Flags Folder (string,in/out) returns the selected folder (or null if user cancelled). On input specifies the default folder. Note even when the RootID parameter is specified, this default folder specification must be absolute (i.e. not relative to the RootID). But it must specify a folder on or below that RootID folder. RootID (numeric, in) may be used to specify a root folder, above which the user would not be able to navigate. May be any single one of the standard Windows directory CSIDL_xxx identifiers, the most typically useful of which are: CSIDL_APPDATA (&h001a) The common repository for application-specific data. e.g. c:\documents and settings\username\Local Settings\Applicationdata\app (CSIDL_xxx list to be continued...) Title (string,in) specifies the title message which appears in the dialog box. (There is room for 2 or 3 lines of text, which will be auto-wrapped as needed.) Flags (Numeric): BIF_RETURNONLYFSDIRS (&h0001) Return only file system folders BIF_DONTGOBELOWDOMAIN (&h0002) Don't include network folders below the domain level BIF_RETURNFSANCESTORS (&h0008) Only return file system ancestors BIF_EDITBOX (&h0010) Include an edit control in the dialog to allow user to type a path BIF_VALIDATE (&h0020) Don't allow user to type an invalid name in the edit box BIF_NEWDIALOGSTYLE (&h0040) New style of dialog; offers several enhancements over original style (resizing, drag/drop, new folder button, delete, etc.) BIF_USENEWUI (&h0050) Combination of BIF_NEWDIALOGSTYLE and BIF_EDITBOX BIF_BROWSEINCLUDEURLS (&h0080) Allow display of URLs (requires BIF_USERNEWUI+BIF_BROWSEINCLUDEFILES) BIF_UAHINT (&h0100) With BIF_NEWDIALOGSTYLE and not BIF_EDITBOX, displays a standard hint to the user in place of the edit box. BIF_NONEWFOLDERBUTTON (&h0200) Eliminates the "New Folder" button BIF_KBDLOCKLATETARGETS(&h0400) Don't traverse target as shortcut BIF_BROWSEFORCOMPUTER (&h1000) Only allow selection of computers BIF_BROWSEFORPRINTER (&h2000) Only allow selection of printers. (Automatically sets the RootID to CSIDL_PRINTERS unless RootID is already non-zero.) BIF_BROWSEINCLUDEFILES(&h4000) Dialog displays files as well as folders BIF_SHAREABLE (&h8000) Dialog can display shareable resources on remote systems The MIAMEX.BP sample program in [908,30] of the SOSLIB has been updated to illustrate this function. 3. --- New TAB(-10,AG_BROWSEFOLDER); command to access the MX_BROWSEFOLDER function: ? tab(-10,70);Folder,RootID,title,flags;chr(127); input line "", Folder 4. --- New MX_GETSHELLPATH (171) function for retrieving the actual directory path for a specified Windows directory ID (using the CSIDL_xxx values referenced above in MX_BROWSEFOLDER) xcall MIAMEX, MX_GETSHELLPATH, RootID, Folder RootID (numeric, in) - same as RootID in MX_BROWSEFOLDER Folder (string, out) - returns the corresponding directory path. 5. --- New TAB(-10,AG_GETSHELLPATH); command to access the MX_GETSHELLPATH function: ? tab(-10,71);RootID;chr(127); input line "", Folder 6. --- Fix PASSTHROUGH printing bug: was outputting only a blank page (introduced in 5.1). ============================================================================ A-Shell Development Notes Version 5.1.1105.2 (28 Feb 2008) ============================================================================ 1. --- ATSD/APEX Bug fix: In some cases, use of PRINT or XCALL SPOOL under ATSD was causing APEX options to be set as if you were running under a local Windows GUI environment. 2. --- Printing enhancement: the maximum one dimensional tab value has been increased from 472 to 4095. ============================================================================ A-Shell Development Notes Version 5.1.1105.1 (25 Feb 2008) ============================================================================ 1. --- Fix bug in OPTIONS=GUI_SPC_IND (introduced in 1104.3); was having unwanted effects on some non-static controls (like INFLD). ============================================================================ A-Shell Development Notes Version 5.1.1105.0 (20 Feb 2008) ============================================================================ 1. --- REGEX.SBX bug fix: return STATUS values were mixed up. ============================================================================ A-Shell Development Notes Version 5.1.1104.4 (18 Feb 2008) ============================================================================ 1. --- New ATE command: TAB(-10,AG_OPTIONS);"op,options1,options2";chr(127); (AG_OPTIONS=69). The command allows you to set or retrieve OPTIONS values from the ATE client (similar to MX_GETOPTIONS & MX_SETOPTIONS) but for the ATE client. Op values: 0 = get current options. These are returned in the keyboard buffer in the format options1,options. For example: ? tab(-10,69);"0";chr(127); input "",OPT1,OPT2 1 = set values (using passed options1, and if specified, options2) 2 = set only the option2 value 4 = OR (set) individual bits from options1 and options2. This allows you to set one or more bits without having to first retrieve the current settings (in order to avoid changing existing flags). Note that you can specify options1 or option2 = 0 to avoid changing it. 8 - clear individual bits. In this case, any bit that you specify in options1 or options2 will be cleared from the current settings. Again, you can specify 0 to avoid changing one set of flags or the other. ============================================================================ A-Shell Development Notes Version 5.1.1104.3 (17 Feb 2008) ============================================================================ 1. --- Text-to-GUI Enhancement: OPTIONS=GUI_SPC_IND now fully tokenizes strings containing consecutive spaces in order to preserve the column alignment of the tokens. It also converts tokens made of --------- or ========= to graphic horizontal lines. ============================================================================ A-Shell Development Notes Version 5.1.1104.1 (8 Feb 2008) ============================================================================ 1. --- XTREE bug fixes: same as those for 999.2 2. --- Multi-monitor bug-fix: In certain situations, windows beloning on a secondary monitor in negative space were offset too far to the left to be visible. 3. --- Multi-monitor enhancement: When launching A-Shell, the main window is now repositioned to be visible if otherwise outside the range of the virtual desktop. 4. --- XTREE enhancement: New advanced column option InfDef=xxx opens the door to the ability to specify some variations of XTREE editable cell behaviour using INFLD TYPE codes. Currently this only applies globally for all columns in the tree, and only the following TYPE codes are supported: e force non-destructive ) start cursor at end of field, requires e ============================================================================ A-Shell Development Notes Version 5.1.1104 (4 Feb 2008) ============================================================================ 1. --- ATE 5.0 and 5.1 now have separate COM identifiers, so they can be run in parallel. Note: this also means that any COM XCALLs, such as FTPDLXCALL.DLL, are also specific to 5.0 or 5.1. (If you have created your own COM XCALLs, contact us for details on converting them to 5.1). 2. --- APEX fix: Spooler switches (such as /LANDSCAPE) are now passed to child sessions, i.e. from A-Shell to APEX. ============================================================================ A-Shell Development Notes Version 5.1.1103.2 (29 Jan 2008) ============================================================================ 1. --- New XTREE coldef option: HdrLines=# Analogous to the TotalLines=# option, this allows you to specify a number of lines at the top of the tree that are to be treated as fixed headers and thus not included in sorting. ============================================================================ A-Shell Development Notes Version 5.1.1102.3 (22 Jan 2008) ============================================================================ 1. --- New EZSPL.SBR/SPOOL.SBR SWITCHES parameter values: 524288 = Force APEX Preview on (requires APEX on the client) 1048576 = Force APEX Preview off 2. --- New PRINT.LIT 3.0(123) switches: /PREVIEW /NOPREVIEW /SW:#### The first two override the APEX (GUI Print Preview) defaults on the client. The last is a alternate way of passing switches, instead of by name, you can pass the sum of the numeric switch values (as you would in the SWITCHES parameter of SPOOL.SBR/EZSPL.SBR). 3. --- New EZ-SPOOL configuration file command: SWITCHES = {+/-}##### This allows you to add, remove, or replace the SWITCHES passed in the XCALL EZSPL, xcall SPOOL, or even XCALL EZTYP. For example, SWITCHES = +524288 would force EZSPL (including EZTYP) to act as if the 524288 (GUI PREVIEW) switch had been set by the caller, and thus would launch the new GUI Preview utility instead of the text preview. Currently the main value of this is probably that it allows you to force EZTYP to use the new Preview utility, provided you are running under A-Shell/Windows. (For A-Shell/UNIX, there is probably no need for this, or I need to think about it more.) ============================================================================ A-Shell Development Notes Version 5.1.1101 (2 Jan 2008) ============================================================================ 1. --- New AUI_CONTROL ctype2 flag: CMF2_PIXCOORDS (&h00000020) allows the coordinates of a control to be specified in pixels rather than in row/col units. ============================================================================ A-Shell Development Notes Version 5.1.1100 (7 Nov 2007) ============================================================================ 1. --- Rewrite the GDI printing code to support an add-on print preview mechanism (APEX) to be offered as an add-on component. 2. --- New XTREE opcode (in xtr'opcode): XTROP_PRINT (6) This option invokes a variation of the APEX Print/Preview facility to allow the contents of the specified XTREE to be printed, with an initial print preview mode. Unfortunately this cannot be invoked in such a way as to allow the XTREE data to be merged with other application-generated data in the same report, but may still be a useful utility function. Note that you can also invoke the operation from the special control dialog reachable via Control+Shift+Double-Right-Click. 3. --- New REGEX.SBR - regular expression processor. NOTE: Although REGEX.SBR was originally introduced in 5.1.1100, it has been reworked (with some slight compatibility adjustments) and re-introduced in 5.1.1108. All the notes for it which were originally here have been moved to 5.1.1108 above.