============================================================================ A-Shell Development Notes Version 4.8(845)-4 (13 Jul 2007) ============================================================================ 1. Fix: XCALL CGIUTL, 2, parmname, parmval, status, string It was ignoring the string parameter and always using the stdin instead. ============================================================================ A-Shell Development Notes Version 4.8(845)-3 (12 Nov 2004) ============================================================================ 1. Fix a longstanding (since day 1) bug in all variations of the compiler, which permitted an unmatched ELSE statement to be compiled without error. The most common form of this occurred when forgetting the & in the following: IF A=B THEN PRINT "A=B" ELSE PRINT "A<>B" Without an & at the end of the first line to continue it, it should have produced an error on the ELSE, but didn't. Instead, the ELSE clause was always executed, as if it was associated with a null IF clause that was never true. ============================================================================ A-Shell Development Notes Version 4.8(845)-2 (08 Oct 2004) ============================================================================ 1. Fix a display issue in the TRACE=LOCKS display of pending LOKSER-style locks in which it would report CH -1 and FILE ? for certain ISAM locks. The problem did not affect the program operation but undermined the value of the trace display for those situations. *NOTE: The version of this patch posted on 7-Oct (and showing 7-Oct as the Release date in the About box) was incomplete. It fixed part of the problem but failed to link in the part the applied to locks placed during the opening of an ISAM file. Please replace with this version (which shows 8/Oct/2004 in the About box). ============================================================================ A-Shell Development Notes Version 4.8(845)-1 (26 Sep 2004) ============================================================================ 1. (UNIX) TCP-related adjustments to deal with the problem of zombie children accumulating in certain kinds of AlphaBasic server programs that use SUBMIT to fork children. Also, receipt of an external signal while waiting for a connection no longer aborts the wait. 2. (UNIX) New miame.ini switch SBR=SUBMIT2 causes SUBMIT to use the "double-fork" method when creating child processes which run directly (rather than through the 'at' queue). In the "double-fork" method, a child is created, and then that child creates another child (grandchild of the original job) to run the submitting job. The advantage of this technique is that if original job exits before the submitted job, the submitted job will be adopted by the init process and thus saved from becoming a zombie when when terminates. The main downside of this technique is that it makes it more difficult to match up submitted processes to their owners, so it probably should only be used in cases where you are having trouble with submitted jobs becoming zombies due the parent exiting too soon. (Note that submitting a job with the /NEXT or /AFTER switch will send it to the 'at' queue, which eliminates the dependency on the parent job. But it takes slightly longer to get started, which may be one reason not to use that approach in a TCP server where you want to service requests as quickly as possible.) ============================================================================ A-Shell Development Notes Version 4.8(845) (27 May 2004) ============================================================================ 1. Increase maximum title buffer size (e.g. SET TITLE) from 80 to 160. 2. (Linux) Workaround problem with SUBMIT not working with Red Hat 6.x 3. (UNIX) Assign background jobs 127.0.0.1 for the IP address. (This avoids various kinds of problems in some applications that use the IP.) 4. Increase maximum filename length returned in the MIAMEX 20 & 21 functions from 34 to 120. Note that this is just the filename, not the entire path. The maximum starting directory length has been increased from 100 to 160. 5. (Linux) Workaround problem with inmemo preload in Red Hat 6.x in which it waited for keyboard input when it shouldn't have. 6. Support timeout in menu mode, same as in normal text editing mode. (Set EXTTIM parameter in EXTCTL to number of seconds.) ============================================================================ A-Shell Development Notes Version 4.8(844) (02 Apr 2004) ============================================================================ 1. FPROUND wasn't working right in the INT(x) function when x < 0. (It was generally rounding -X down to -(X+1), i.e. INT(-2) to -3.) 2. A new tool, clumsily called "The Floating Point Variable Rounding Factor", has been introduced in the ongoing battle between floating point imprecision and expected accounting precision. As a new tool, it rightly belongs in the 4.9 development release rather than here in the 4.8 "stable" release, but the floating point "problem" has suddenly become so acute for a few large sites that we felt we had to provide some kind of magic bullet. The feature consists of the ability to declare a rounding factor for all floating point variables, that is applied whenever the variable is accessed. As an example, if your application stores all monetary figures in pennies (always dividing by 100 to convert to dollars and cents), and has no interest in fractions of pennies, then you could set the rounding factor to 1, which means that all floating point variables would be rounding to the nearest integer whenever they were accessed. On the other hand, if you store some of your amounts in dollars and cents, then you might want to set your rounding factor to .01, meaning that all variables would be rounded to the nearest .01 whenever accessed. The default factor is 0, which means that no rounding is applied (just as it has been up to now). You can set the factor to anything, not just numbers 1 or smaller. For example, a financial statement program for a Fortune 100 company might set it to 1000, which would round every variable to the nearest 1000. Or a point-of-sale program in a country whose monetary system is in transition might set it to the denomination of the smallest common current unit (perhaps 25). The important thing to remember is that the factor, once set, applies to every floating point variable accessed from memory, until it is reset to some other factor. It is not automatically reset at the end of each program. However, it does not apply to LIT programs. The concept is somewhat similar to the OPTIONS=FPROUND, but obviously much more drastic. FPROUND operates on expressions rather than variables, generally adding or subtracting a "fudge factor" of .000005 or less, depending on the expression, in order to coerce numbers like 1.9999999997 or 2.00000000001 to "stick" to the nearest integer. (But as you can see from the number of patches to the way it works over the years, the technique is difficult to manage, and sometimes results in making the "problem" seem worse rather than better. The new variable rounding feature is much more blunt, but also more uniform and easy to understand, and thus might actually serve as a magic bullet for some applications which have not conquered the floating point precision problem through other means (such as manually rounding the results of calculations before storing them). To query or set the rounding factor, use: XCALL MIAMEX,127,OP,FACTOR where OP is 0 to retrieve the current setting and 1 to update it. FACTOR is the rounding factor. The following test program will be useful for testing and experimenting with the feature. SIGNIFICANCE 11 MAP1 F1,F MAP1 F2,F MAP1 FPROUNDFACTOR,F MAP1 A$,S,1 xcall MIAMEX,127,0,FPROUNDFACTOR ? "FP Rounding factor is ";FPROUNDFACTOR input "Change it? ",A$ if ucs(A$)="Y" then & input "Enter new factor (0,1,.1,.01 etc): ",FPROUNDFACTOR :& xcall MIAMEX,127,1,FPROUNDFACTOR LOOP: input "Enter a value: ",F1 ? "Value = ";F1 F2 = F1 / 3 ? "Value/3 = ";F2;" (";F1/3;")" F2 = F1 * .01 ? "Value*.01 = ";F2;" (";F1*.01;")" goto LOOP The program illustrates that the variable rounding factor only affects the variables F1 and F2, but does not show up when an expression is printed directly (such as F1/3). At the risk of running this topic into the ground, it is worth saying a few words about why the problem exists, why it seems worse (to some people) under A-Shell than under AMOS, and why it sometimes surfaces in programs that were "working" for many years. First, the problem is inherent when floating point values are represented in the computer with a finite number of bits. Even a simple calulation like 7/2 might result in 3.499999999998 rather than the 3.5 you were expecting. In this example, with the 48 bit floating point format used by the Alpha, the effective number of significant digits is about 11, and thus 3.499999999998 would be internally rounded to 3.5 and you wouldn't notice the problem. But with the 64 bit IEEE format used by virtually every other machine outside of the Alpha, you get about 16 significant decimal digits and thus 3.499999999998 would remain as is. As long as you printed it with a mask, e.g. "######.##", it would always appear as "3.50" but if you didn't round it before storing it, subsequent use of the variable would carry the imprecision into other calculations. For example, if you added up several hundred thousand of these kinds of values, each with a slight rounding error, the cumulative error could easily grow to the point that it made a difference in the pennies column. The reason why the problem seems worse under A-Shell is simply due to the seemingly paradoxical fact that the more bits of precision, you have in the internal floating point calculations, the more likely your result will be off by a significant digit. For example, if the floating point format could only represent about 2 decimal digits, then the result of every calculation would effectively be rounded to the nearest hundredth. (Which is effectively the "capability" that the new variable rounding factor feature provides.) The reason why the problem sometimes suddenly appears in programs that have been working for years, is that as businesses grow and computers get faster, there is a tendency to deal with greater amounts of data and for the computations to increase in complexity. For example, in 1980, a company might have had a payroll of 100 and only a couple of simple deduction types. Now, through mergers and other growth, in both the economy and the tax code, it might have 1000 employees and several more deductions. As the number of calculations increases, the internal rounding errors can accumulate to the point that one day, a paycheck is off by a penny. And suddenly there is a panic. Or, in a more insidious variation of this problem, results from calculations may be stored in files without the rounding errors being first corrected. (For example, a product history file might contain a record of the dollar amount of each sale of that product. Assuming the dollar sale amount was the result of a calculation (qty times price, perhaps with a discount), it might well contain a slight rounding error. As in the example above with 7/2 = 3.499999999998, it may take a long time before this your history file grows big enough for the error to become visible. And since the errors will, on average, split evenly on both the low and high sides, they might tend to cancel themselves out, on average. But one day, you select the right combination of dates or other reporting factors and voila, the report is off by a penny. (One way that careful programmers have dealt with this problem is to always use a rounding mask before storing a result, for example, RESULT = USING "#########.##". But if you haven't done that all along, you might find it a bit daunting to start now.) Going back and fixing a problem like the one just described may not be easy, especially if the application now contains thousands of programs. For this kind of situation, the variable rounding factor might provide a near miracle solution. Even if you couldn't be sure whether you might have some variables that are supposed to contain tenths, or hundredths, or thousandths, you can still benefit by setting the rounding factor to, say, .00001 or even .000000001. Since the rounding errors tend to start out in the vicinity of .00000000000001, this would be more than enough to eliminate them as they occur. The main thing to watch out for is situations where you really do want to have a precise representation of factions like 1/3. For example, if you wanted to apply a discount of 1/3 to some vary large number, then you probably wouldn't want your 1/3 to be rounded to .33333 (instead of .33333333333). After all, 1/3 of a million is 333,333.33 but if your representation of 1/3 was merely .33333, then the result would be 333,330.00. Note, however, that the rounding factor is only applied to variables, so it would not stop you from getting a precise result for 1000000/3; it would only cause a problem if you set F=1/3 and then multiplied 1000000 by F. The final word then, is that if you fear that you have this problem and want to try the new variable rounding factor, start small (perhaps .000000001) and work up if that isn't sufficient. But it goes without saying that this kind of technique should not be applied without some diligent analysis and testing of your application. ============================================================================ A-Shell Development Notes Version 4.8(843) (30 Mar 2004) ============================================================================ 1. (Linux) The FPROUND fix (item 5 under 842-8 below) didn't actually get into the Linux version. Problem now resolved. ============================================================================ A-Shell Development Notes Version 4.8(842)-9 (26 Mar 2004) ============================================================================ 1. (UNIX) Support ashell command line switch -nfs to be used when multiple systems are sharing the jobtbl.sys file over NFS or a similar network filesharing mechanism. Switch is needed to avoid one system from thinking processes that are running on another system are actually phantoms, which can lead to "job zapped" problems. 2. (UNIX) Background jobs now use 127.0.0.1 as their IP address in the job table. (This helps eliminate confusion in applications that use the IP address to identify real workstations.) 3. A problem with certain directory scanning operations not working properly when SET HEX is on has been fixed. Problem was introduced between 4.8(842) and 4.8(842)-8. ============================================================================ A-Shell Development Notes Version 4.8(842)-8 (22 Mar 2004) ============================================================================ 1. Tracing of file opens improved somewhat when TRACE=XCALL,FOPENS 2. Fix INMEMO bug with pasting of Latin 1 characters from clipboard. 3. Fix INMEMO GPF problem which occurred when 26 compressed spaces were split over two physical memo records. 4. Various fixes and minor enhancements to the ERS subroutines TRSRCH, DTSRCH, ZCLOSE. 5. Fix another bug in FPROUND which was causing numbers formatted with very long masks to sometimes be off by one in the least significant digit. 6. Handle more gracefully a stack overflow condition caused by trying to manipulate a string larger than the amount of available work memory. (Was crashing; now reports stack overflow.) ============================================================================ A-Shell Development Notes Version 4.8(842) (25 Jan 2004) ============================================================================ 1. (UNIX) Support SBR=INFLD_KEEPALIVE to send a harmless byte sequence every 15 seconds while waiting for input within INFLD (which includes the dot prompt and BASIC INPUT statements). This serves two purposes. First, it will prevent connections from being dropped due to lack of activity while they are actually in a program waiting for input. Second (and perhaps more important), it provides a mechanism for UNIX/Linux servers to detect connections that have been dropped (without having to wait for the standard keepalive timers to expire, which by default may run to 2 hours). This way, within 15 seconds of the connection being dropped, the server will send a packet, which cannot be delivered. This should trigger a retry timer which will try to resend the packet some number of times before concluding that the connection is dead. This process is generally much quicker than the keepalive detections process. Note that under Linux, the retry timers are controlled by two files in the /proc filesystem: /proc/sys/net/ipv4/tcp_retries1 and tcp_retries2. The default values of 3 and 15, respectively, may be large for your liking, possibly taking as long as 15-30 minutes to close the dropped connection. You can set them as low as 1 and 2 for nearly immediate detection, at the possible risk of prematurely judging a temporarily sluggish connection to be dead. A good documentation link with more information about the tcp variables in the /proc filesystem is: http://ipsysctl-tutorial.frozentux.net/chunkyhtml/tcpvariables.html 2. A ancient yet nasty bug in FLOCK has been fixed. The symptom was that the queue block representing permission for a particular file to be open could be overwritten by a record request for the same file, causing subsequent requests for that file to return status code 3 or 6 (permission to open file must first be granted). The chance of the error manifesting itself depended on many factors, and judging from the fact that it has never been reported (even though it affected versions going at least as far back as 4.4), probably didn't occur very often. (We discovered it in-house while testing the performance improvement of the QFLOCK MEM: option for Windows in the 4.9 development version.) Nevertheless an update is highly recommended. ============================================================================ A-Shell Development Notes Version 4.8(841) (14 Jan 2004) ============================================================================ 1. (Windows) Improve raw disk read speed (of READ-intensive tasks) by about 15% by eliminating an unnecessary interruption to process Window events and check for ^C prior to each READ which was introduced in edit 816. ============================================================================ A-Shell Development Notes Version 4.8(840)-8 (13 Jan 2004) ============================================================================ 1. VERSYS.LIT 1.0(103) fixes a bug introduced in [102] in which it would not necessarily display the versions of the included modules. 2. MIAMEX function 100 (Playsound) was not handling AMOS filespecs; fixed. ============================================================================ A-Shell Development Notes Version 4.8(840)-7 (12 Jan 2004) ============================================================================ 1. (Windows/ATS) Null bytes are no longer stripped from output to the terminal, allowing, for example, ZTERM ESC sequences to be used. ============================================================================ A-Shell Development Notes Version 4.8(840)-6 (10 Jan 2004) ============================================================================ 1. Fix various problems in EZSPL/SPOOL's interpretation of the layout of the "new xcall spool format" parameter packet. The general effect was that option flags were not always getting recognized. 2. Fix a bug in EZSPL which caused it to terminate if all options except ASKPRT were off. 3. (LINUX) Correct a problem with rounding which was introduced in the 838-8 patch. The problem caused an incorrect digit to appear in one of the least significant digits of very long masks. 4. FPROUND option support expanded to affect negative arguments to the INT() and FIX() functions. For example, INT(-13.9999999) previously returned -13 even when FPROUND was set; now it returns -14 when FPROUND is set. FPROUND logic is also not applied when assigning a floating point expression to a binary variable (which effectively implies the use of the FIX() function). 5. When ENTER is used to exit from a single-line memo (see 840-2 below), it now sets the "memo-updated" bit, forcing the memo to be saved. Previously, it just acted like ESC, which meant that the memo was not saved unless the operator typed something in other than just hitting ENTER. (Preloaded text does not set the "memo updated" flag unless it contains a ^F, ^D, or CR. This is a feature designed to avoid the saving of memos that only contained a time-date stamp provided by the application. The problem was that in a single line memo, ENTER was being treated like ESC, which did not by itself set the "memo updated" flag. Now it does.) ============================================================================ A-Shell Development Notes Version 4.8(840)-1 (29 Dec 2003) ============================================================================ 1. INMEMO was not zeroing the returned LINK parameter when deleting memos with the MMO'DEL opcode. (This escaped notice for so long probably because most apps are also deleting the record to which the memo was attached at the same time, so the returned link was usually irrelevant.) 2. INMEMO was not automatically setting the MMO'RET option on single line memo pads (which allows you to exit from the memo editing operation simply by hitting ENTER when on the bottom row.) ============================================================================ A-Shell Development Notes Version 4.8(840) (28 Dec 2003) ============================================================================ This maintenance release retrofits a number of minor patches and features that were introduced in the the 4.9 development version but which have been deemed compatible with 4.8. (The full release packages available on the main microsabio.com download page have been brought up to this level.) The first few items affect the A-Shell executable; the remainder are just updates to the LIT files. 1. Remove horizontal scrolling limit with right arrow of 52 columns. 2. (Windows) Workaround bug in certain foreign keyboard drivers (Italian, possibly others) in which use of the ALT-GR key would appear to leave the CTRL key pressed. 3. (Windows) A stray cursor mark is no longer displayed when the mouse is used to set the focus on A-Shell after it had been in the background. 4. Modifications to the ersatz table are now recognized on the next file lookup operation (previously there may have been a delay of 30 seconds or so before it re-read the new table.) 5. ISMBLD.LIT 2.2(119) fixes the /D and /N switches which were broken back in edit 2.2(117) when native file support was added. 6. ISMUTL.LIT 1.2(127) fixes a bug in which a ppn added to the end of the filename would cause the operation to fail; also clean up display so fspec doesn't wrap. 7. LOG.LIT 1.5(119) now treats "LOG #," same as "LOG #,". Also fixes problem with /N executing START.CMD anyway if >1 block. 8. MOVE.LIT 1.0(104) fixes a problem with looping "output specification missing" messages. 9. SYSTAT.LIT 2.2(144) Adds column totals in /W mode. Also now probes other jobs even in Windows mode to get more up to date information. (Previously only UNIX version gave a real-time snapshot.) A "?" is displayed after jobs that are not responding to the probe. 10.TELNET.LIT 1.0(103) adds a syntax help message (TELNET /?). 11.VERSYS.LIT 1.0(102) now shows the program header flags, indicating some compiler switch information (those that can be determined by looking at the RUN) and AMOS compatibility level. 12.VUE.LIT 2.0(110) now forces a reload of the ersatz table if the file being edited has a .INI or .ERZ extension. Note that it is still the case that if the miame.ini references multiple ERSATZ tables, only the only one can be updated dynamically. For all other updates, you have to exit and restart A-Shell for the update to have an effect. 13.SYSTAT.LIT 2.2(145) fixes a bug introduced in edit 144 which broke the sorting option. It also introduces a new switch /ST, which sorts by job type, causing all A-Shell daemons to appear first, then the pshell jobs (which can be eliminated with /R), then the background jobs, and finally the foreground jobs. 14.Several LITs had to be updated for 4 9 compatibility. Since this update did not compromise backwards compatibility, we have now added them to the 4.8 release to make it easier to switch back and forth between 4.8 and 4.9. All had an "A" added to the version, without changing the edit number: ASTAT.LIT 2.2A(131) CHAT.LIT 2.2A(118) FORCE.LIT 1.0A(103) JSTAT.LIT 1.0A(104) KILL.LIT 2.2A(118) LOCK.LIT 1.2A(105) LOKUTL.LIT 2.2A(111) QUIT.LIT 2.2A(102) QUTL.LIT 2.2A(123) SEND.LIT 2.2A(120) SUBMIT.LIT 3.0A(133) SYSTAT.LIT 2.2A(145) ============================================================================ A-Shell Development Notes Version 4.8(839) (6 Dec 2003) ============================================================================ 1. PolyShell 1.4(154)-1 closes a loophole in which two PolyShell sessions under race conditions (simultaneous startup) may both initialize the JOBTBL, leading to "Job PSHAA1 already in use" errors. The liklihood of this happening was pretty slim, except when ashgetty was being used to launch PolyShell sessions out of the inittab during system boot. A-Shell 4.8(839) contains the same fix, but was probably not an issue there since it already had workaround logic, or at worst, could simply be restarted. 2. Fix bug in PCKLST.SBR memory array mode in which it might not display any items if PROMPT="". PROMPT="" is now treated like PROMPT=chr(13) for that mode. 3. WRITECD and WRITETD (output comma delimited and tab delimited) statements now strip leading blanks (as well as trailing blanks) from strings, matching the documentation. ============================================================================ A-Shell Development Notes Version 4.8(838.9) (14 Nov 2003) ============================================================================ 1. (LINUX) Fix bug in TRSRCH.SBR search for amount, and in DTSRCH.SBR rollover to next file. ============================================================================ A-Shell Development Notes Version 4.8(838.8) (11 Nov 2003) ============================================================================ 1. (LINUX) Workaround apparent bug in floating point conversion library which causes the expression (N+.5) USING "###" to map to N rather than N+1 when N is even. Problem affected Red Hat Linux 8.0 and up, and possibly earlier versions as well. 2. ISMUTL.LIT 1.2(127) - Fix bugs introduced recently when support for specifying a PPN was added. Display of filename wrapped around edge of screen, and create file operation would sometimes fail due to length of filename. ============================================================================ A-Shell Development Notes Version 4.8(838.7) (18 Oct 2003) ============================================================================ 1. (UNIX) Fix bug in memory mapping (via ASFLAG,16) which caused writes to generate segmentation faults! ============================================================================ A-Shell Development Notes Version 4.8(838.5) (11 Oct 2003) ============================================================================ 1. Fix a bug in ISAM relating to specifying the .IDA extension in an ISAM open for INDEXED'EXCLUSIVE. When the file was closed, the IDA would be renamed to IDX and the original IDX would still be IDY. The problem did not occur if you did not specify an extension in the the open statement. For example, this would have been ok: OPEN #1, "MYFILE", INDEXED'EXCLUSIVE, RSIZ, RNO But the following would not have been ok: OPEN #1, "MYFILE.IDA", INDEXED'EXCLUSIVE, RSIZ, RNO The second form is rather unusual, so this bug probably didn't affect many people. It was introduced in edit 820 when support for the use of native filespecs was added to ISAM. ============================================================================ A-Shell Development Notes Version 4.8(838.4) (10 Oct 2003) ============================================================================ 1. XCALL AMOS now supports another optional argument to control whether it runs within the current process as a true subroutine or in a newly created child process. Overall syntax is now: XCALL AMOS, CMD {,QUIET'FLAG {,PROCESS-FLAG}} if QUIET'FLAG is specified as anything other than a null string or a numeric 0, then the subroutine will run "quietly" (i.e. with no screen output.) This was always the case, although previously even null strings and numeric zero values worked. PROCESS'FLAG can optionally be specified as a numeric 0, 1 or 2. 0 is the same as if it wasn't specified at all, in which case the AMOS_RUNSBR setting (set in the MIAME.INI or via SET.LIT) controls whether the subroutine will operate within the current process or not. If PROCESS'FLAG=1, this forces the subroutine to act as if the AMOS_RUNSBR flag had been set. If PROCESS'FLAG=2, this forces the subroutine to act as if the AMOS_RUNSBR flag had not been set. Note that there are certain specific commands that AMOS.SBR always executes within the current process (like LOG, VUE, and SET) and others that it always executes in a separate process (like CMD/DO files). Using PROCESS'FLAG does not change this. It only has the effect of temporarily setting the AMOS_RUNSBR option one way or the other. (This borders on an enhancement rather than a fix and thus might have been pushed off to 4.9, but was needed to work around an esoteric problem in a particular application just now being rolled out, so it was squeezed in here. Fortunately, the implementation was very simple and thus is unlikely to introduce other problems, unless you were previously relying on being able to send even a null or zero for the QUIET'FLAG.) 2. XCALL STRIP and XCALL TRIM with no argument no longer crashes. 3. (UNIX) ashlog.log is now copied to corelog.# (# = 0 to 19) in the case of a segmentation fault. 4. (UNIX) Errors occuring during the creation or deletion of directories are now logged to ashlog if TRACE=BASERR. 5. (LINUX) Several fixes were implemented in the TRSRCH.SBR routine (applicable only to a single developer). 6. (WINDOWS ATS) Garbage characters were appearing in pick lists, message boxes and INMEMO boxes in certain emulations when running via the A-Shell Telnet Service (ATS). ============================================================================ A-Shell Development Notes Version 4.8(837.5) (1 Oct 2003) ============================================================================ 1. Eliminate an extremely obscure situation (probably limited to a single developer who reported the problem) in which A-Shell could run out of memory handles due to repetitively and manually loading a memory module using an ersatz spec. 2. (Windows) Close a loophole in which an attempt to open a sequential file for input might fail, but actually leave the file open anyway, thus causing subsequent problems with getting access to the file. The situation was most likely to arise when trying to open a file which had just been created (or was in the process of being created by an external application) 3. (Windows) The wait'file option on an OPEN statement (for sequential INPUT) now actually waits if the file is currently open for output by another A-Shell process. This, along with the above fix, should make it easier for applications that pass data between separate jobs or applications via the reading and writing of sequential files. (Under UNIX, the wait'file option continues to have no affect when opening a file for sequential input.) ============================================================================ A-Shell Development Notes Version 4.8(837.4) (28 Sep 2003) ============================================================================ 1. (Windows) MIAMEX function 20 (Find First File) now returns the long file name, just like function 21 (Find Next File) does. Previously it returned the 8.3 mangled filename. Also note that the documentation is wrong about the value of the returned STATUS parameter. For both functions (20 and 21), a return STATUS of zero indicates success; non-zero indicates no more files. ============================================================================ A-Shell Development Notes Version 4.8(837.3) (25 Sep 2003) ============================================================================ 1. INFLD now checks that the INXCTL, EXITCODE and TIMER arguments, if passed, are of the proper size before updating them. This prevents the possibility of overwriting 1-5 bytes following such parameters if they are incorrectly supplied using type B or S instead of F. (You guessed it: somebody spent a lot of time tracking down a bug related to a mixup in an XCALL INFLD parameter list; hopefully this fix will save someone else from the same misery.) Note: most XCALLs do check for valid parameters before writing to memory; INFLD is a special case in that it supports so many different argument types and calling formats that it is difficult to check for every possible application programming error, and this particular one was overlooked. 2. INFLD also now allows redefinition of the help key from "?" using the three character TYPE sequence |?x (where x should be replaced by an upper case letter A-Z or [, ], ^, \, or _). For example, |?] will redefine it to ^]. |?A would redefine it to ^A. (This is more of a new feature than a patch, but was needed to support a feature that was available in the AMOS version of INFLD via customization of the INFMSG module.) ============================================================================ A-Shell Development Notes Version 4.8(837.2) (24 Sep 2003) ============================================================================ 1. (UNIX/LINUX) A-Shell was failing to recognize the IP address of a telnet session when the client machine name was resolved to a fully qualified domain name (e.g. like jack.company.com) unless there was an alias for the short name (e.g. "jack") in the /etc/hosts file. Note that A-Shell always checks the /etc/hosts file prior to the DNS when trying to resolve your workstation name. Also note that you can retrieve your IP address using XCALL CONDEV or display it by launching A-Shell with the -d switch. (This will also log a few entries to ashlog.log which can be useful in debugging cases where it is failing to recognize your IP address.) ============================================================================ A-Shell Development Notes Version 4.8(837.1) (15 Sep 2003) ============================================================================ 1. Fix a bug introduced in build 837 in which a FIND followed by a FIND'NEXT or GET'NEXT on an empty ISAMPLUS file was generating a bogus error 231.