============================================================================ A-Shell Development Notes Version 5.1.1121.9 (04 August 2008) ============================================================================ [*NOTE: THIS IS THE LAST 5.1 VERSION PRIOR TO ENHANCEMENTS TO OLD ISAM*] 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 ew.txt 3. --- Rogue filespec bugfix: Filespecs longer than 256 chars were in some cases corrupting the A-Shell stack (usually causing A-Shell to crash.) ============================================================================ A-Shell Development Notes Version 5.1.1119.1 (07 July 2008) ============================================================================ 1. --- MX_COPYFILE bug fix: attempting to copy a random file via its file channel was sometimes causing a program abort. 2. --- INPUT CSV bug fix: hitting EOF while trying to match up a double-quote was causing an infinite loop (problem introduced in 1119.0). A-Shell now displays a warning message when this situation arises, since it almost certainly indicates a problem with the parsing of the data. ============================================================================ A-Shell Development Notes Version 5.1.1119.0 (06 July 2008) ============================================================================ 1. --- INPUT CSV enhancement: two new variations may be enabled via new ASFLAG.SBR flags: AF_CSVNOQUOTE 2048 (&h800) Disables all special handling of double-quote characters (ASCII 34, or "), treating them as ordinary data characters. AF_CSVSMARTQUOTE 4096 (&h1000) Enables "smart" handling of double-quote characters. A-Shell looks at the context of the line to guess whether a double-quote character is being used to enclose a field (that may contain special characters, including line breaks), or it is simply an ordinary data character. 2. --- INPUT CSV fix: Fields that started with a double-quote were being effectively terminated at the next double-quote, so that a field like: "There are 12" in a foot" was being reduced to "There are 12". 3. --- INPUT CSV fix: Double-Double-quotes were not being intepreted as a single double-quote data character unless the field was quoted. Thus the following line: There are 12"" in a foot would have remained unfiltered, while this line: "There are 12"" in a foot" would have ended up with 12" instead of 12"". ============================================================================ A-Shell Development Notes Version 5.1.1118.6 (03 July 2008) ============================================================================ 1. --- GDI printing fix: The special symbol "%#" (which is supposed to be replaced by the total number of pages in the printout) wasn't working. 2. --- APEX now supports the DELETE switch in SPOOL.SBR, as well as the DELETE command in the printer init files, to delete the file after previewing. 3. --- STATIC & PRIVATE variable initialization bug fix: These variables were getting cleared but not properly re-initialized when re-running a RUN or SBX file from memory (i.e. either due to the automatic cache or the LOAD command.) ============================================================================ A-Shell Development Notes Version 5.1.1118.5 (02 July 2008) ============================================================================ 1. --- Remove screen warning message "Class Already Exists" when calling the InitCommonControlsEx() function to initialize the Windows Common Dialog Control classes. Apparently the condition occurs in some versions of windows, but is harmless and not worth bothering the user about. ============================================================================ A-Shell Development Notes Version 5.1.1118.4 (02 July 2008) ============================================================================ 1. --- AUTLOG.SBR fix: back out change to default buffer size made in 5.1.1117.0 (was causing some kind of interference with the Autolog interface). Note that you can still increase the buffer size (i.e. maximum packet size) by passing the larger packet variable size in the initial AUTLOG call. As a byproduct of the debugging, there are now a number of traces that will appear within AUTLOG.SBR if you set the XDEBUG trace flag. ============================================================================ A-Shell Development Notes Version 5.1.1118.3 (29 June 2008) ============================================================================ 1. --- APEX / W2K compatibility fix: the buttons on the APEX toolbar to the right of the "Close" button were not appearing at all in W2K. ============================================================================ A-Shell Development Notes Version 5.1.1118.2 (27 June 2008) ============================================================================ 1. --- Windows printing bug fix: PITCH=AUTO was not adding the LMARGIN value to the line length to compute the required font, thus causing lines to be truncated by the amount of the margin. 2. --- APEX bug fix: A-Shell was hanging in the case where the printfile ended in an unterminated line that contained a FF followed by some other garbage. ============================================================================ A-Shell Development Notes Version 5.1.1118.0 (27 June 2008) ============================================================================ 1. --- CentOS arithmetic bug fix: Calculations involving B4 variables which had been assigned negative values were not working properly. Although B variables are unsigned, it is legal to assign them negative values, and for the most part, when performing calculations involving other B variables, the results are actually consistent. For example: MAP1 BTOT,B,4 MAP1 BVAL,B,4 BTOT = 100 BVAL = -5 BTOT = BTOT - BVAL The resulting BTOT should be 105 (100 - -5). But under CentOS, apparently due to a change in the C compiler behavior, BVAL was getting "pinned" to the minimum signed integer of -(2^31), causing BTOT to be set to a very large number. This kind of arithmetic operation is dangerous in the best of cases (any assignment of an intermediate value to an F variable will mess the results up), but we discovered at least one app that was relying on the above kind of calculation working, and which broke when migrating from the -rh8x (Red Hat 8.x) to the -el4 (RHEL 4/5 or CentOS 4/5) version. Note: this fix will also be retrofitted to 5.0.999.8 2. --- AIX neg/pos crossover fix: Similar to the above issue, there was a problem with calculations involving B or I variables when they crossover over the maximum or minimum value (thereby changing from positive to negative). (This is the same fix as was previously released as 5.0.999.7). 3. --- APEX bug fix: Files with //GDI directives but with no explicit page breaks were causing an infinite loop (creating large output files). (This combination is not recommended, as the preview proprocessor is unable to accurately predict the page break locations that will occur with a particular output device, but it no no longer creates havoc.) Also, a minor problem in which a trailing FF in a proper GDI printfile was causing the preview to indicate an extra blank page, even though such trailing FF chars no longer generate a blank page in the real output - see 1117.7 notes below. 4. --- APEX bug fix: The printer init statements LMARGIN and TMARGIN were being ignored. ============================================================================ A-Shell Development Notes Version 5.1.1117.7 (25 June 2008) ============================================================================ 1. --- Windows printing bug fix: The last line of a print file was being ignored if it had no line terminator (except in the case of a trailing FF). Also, although arguably the handling of a trailing FF was correct, it didn't match the way 5.0 handled it. (For non-PASSTHROUGH, i.e. GDI printouts, a trailing FF is not needed to eject the page, but apparently some applications added one anyway, for historical purposes.) A-Shell now ignores a trailing FF when previewing or whenever in non-PASSTHROUGH mode, provided that the FF is really the very last character of the file. If you want such a trailing FF to have an effect (i.e. eject an extra blank page), then follow it with a LF or CRLF or even just a space. 2. --- Windows printing refinement: When the specified printer doesn't exist, or when previewing with DEVICE=PROMPT:, and the last printer selected no longer exists, A-Shell now displays the warning message but then prompts for a new printer. Previously it just complained and then aborted the print operation. ============================================================================ A-Shell Development Notes Version 5.1.1117.6 (25 June 2008) ============================================================================ 1. --- APEX bug fix: The EZTYP wrapper for APEX was, in some cases, inappropriately trying to save and restore the screen, even through this is not necessary with APEX (since it uses a separate window); this was having some bad side effects on some GUI programs (like destroying the existing controls). ============================================================================ A-Shell Development Notes Version 5.1.1117.4 (25 June 2008) ============================================================================ 1. --- NT4 / W98 compatibility improvement: Trying to launch A-Shell 5.1 under NT4 or W98 was causing it to crash with a message about failure to link FlashWindowEx and/or SHGetFolderPath. These routines are now dynamically loaded only on demand. ============================================================================ A-Shell Development Notes Version 5.1.1117.1 (20 June 2008) ============================================================================ 1. --- FTPDLX bug fixes: 1) transferring a file to/from the root directory of a device was generating a strange error message and aborting the transfer. 2) the automatic re-registration of ftpdlxcall2.dll that occurs on the first FTP transfer for a session was registering the 5.0 version of the module (in some cases leading to an error creating the COM instance). ============================================================================ A-Shell Development Notes Version 5.1.1117.0 (16 June 2008) ============================================================================ 1. --- AUTLOG.SBR refinements: default minimum buffer size increased from 3000 to 7200, and error messages improved slightly. 2. --- MIAME.INI refinement: It is now possible to insert comments (starting with either ; or #) above the SERIAL= line in the MIAME.INI. The INI also now supports an optional [MIAME] section header at the top (making it easier to use standard INI-processing routines, including INIX.SBX, for updating it). ============================================================================ A-Shell Development Notes Version 5.1.1116.6 (13 June 2008) ============================================================================ 1. --- FTPDLX Refinements: FtpDLXcall2.DLL 5.1.0.204 now supports flag 512 (rename host file after copy) in conjunction with wildcarding. Also, when wildcards are specified, an additional log file, ftpdlx.lst, will be created showing the wildcard and the matching files, and if the renaming option is on, the ftpdlx.log file will also show each individual rename. Also, if the remote server doesn't allow renaming if the target already exists, FTPDLX will send an explicit delete command and then try renaming. ============================================================================ A-Shell Development Notes Version 5.1.1116.5 (11 June 2008) ============================================================================ 1. --- Bug fix: EZTYP was aborting with a memory allocation failure on large files. (Affected UNIX versions only). ============================================================================ A-Shell Development Notes Version 5.1.1116.4 (11 June 2008) ============================================================================ 1. --- Bug fix: EZTYP wasn't performing the auto-switch to 132 column mode. 2. --- Compiler bug fix: /CI (case insensitive) wasn't working with functions. New version of standalone compiler: 1.2(403) 3. --- MEM: device bug fix: Basic LOOKUP statement wasn't recognizing the MEM: device (or AUTO_MEMOPEN). In addition to the fix, LOOKUP operations are now traced when the FOPENS trace flag is set. ============================================================================ A-Shell Development Notes Version 5.1.1116.3 (10 June 2008) ============================================================================ 1. --- Fix EZTYP failure in A-Shell/Linux -el4 (RHEL/CentOS) version. ============================================================================ A-Shell Development Notes Version 5.1.1116.2 (10 June 2008) ============================================================================ 1. --- Memory File I/O bug fix: The EOF flag was being set one INPUT statement too soon when inputting from a file loaded into user memory (either by referencing the MEM: device or by using the OPTIONS=AUTO_MEMOPEN). That is, it was being set after returning the last line of the file, instead of waiting for the next attempt to read when there was no more data. Note that the EOF flag really means that we hit EOF before completing the operation. It does not mean that no data was returned. If the last line of a file does not end with a terminator (CRLF or LF), then the EOF flag will be set at the end of returning the last line, even though valid data was input. So to be really sure you are processing all the data in a file, do not assume that EOF means that no data was input. For example: do input line #ch, pline if eof(ch)=1 exit 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 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 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.)J ============================================================================ 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}+ {-skipval}= 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 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 effect 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. --- XTREE 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=" 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 it 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 \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~