1. Reformat qflock.sys and split out the job/instance data into a separate file, jobtbl.sys, which like qflock.sys, is created and removed dynamically. The new arrangement should reduce the bottleneck on qflock.sys access. It also allows us to track more information on each job, some of which is now available via SYSTAT/W (see below.)
2. SYSTAT.LIT 2.0(126) modified to support the new qflock/jobtbl layouts. New /W switch displays statistical information about number of reads (r), writes (w), queue operations (q), programs or commands executed (c), and basic instructions (i), plus the amount of time since the job was started. Note that for efficiency reasons, these stats are only updated when there is some other reason to update the job status, such as running a new command or program, or logging to a new ppn. (Jobs that spend all there time in one program and ppn will not have very useful stats--we are investigating ways to update the information more regularly without impacting performance.)
New /R switch displays "real" jobs only. This is primarily useful to eliminate PolyShell control jobs from the list.
3. The "MEM:" (as opposed to "DISK") option on the QUEUE= statement in the MIAME.INI is now available under Windows as well as UNIX. It is not clear, though, whether it provides any performance gains over the normal DISK: mode, and therefore is not particularly recommended unless you feel there is a severe bottleneck in xlock or flock operations. Unlike the MEM: mode under UNIX, the qflock.sys file is still maintained on disk regardless of the DISK: or MEM: option. The only difference is that with MEM:, the entire file is fetched into the workstation memory whenever it is locked, and then all subsequent operations are done in memory until it is unlocked, when it is written back to the disk. Unfortunately, since the typical lock/access/unlock sequence in XLOCK.SBR or FLOCK.SBR involves only a few individual reads and writes, the reduction in I/O is not that great. You end up with fewer tiny reads and writes (and thus fewer server interrupts) but more data being transferred across the network. This tradeoff would be an advantage in cases where the total size of the qflock.sys file was relatively small, but the average number of XLOCK and FLOCK records was relatively large, and the server was under heavy load but the network was not saturated. Note that if you do choose the MEM: mode, it is critical to not allocate more queue blocks than are likely to be used, since the total numbers gets transferred in every operation. With the DISK: mode, excess ununsed queue blocks don't have much effect on performance.
4. Fix a problem in which CMD file processing stopped working if you went into a timed INFLD call.
5. A minor adjustment was made to substring handling when the starting position is specified as 0, in order to match exactly what AMOS does. Previously, A$[0,1] and A$[0;1] were treated as equivalent to A$[1,1] when on the right side of an equal sign. Now they return null.
6. Fix bug in DATES.SBR involving opcode 6 and month 12.
7. Fix two bugs in EZVUE/EZTYP which could lead to it "hanging" or going into an infinite loop. One had to do with paging of small non-page- oriented files, and the other with handling of Control-C.
8. Under Windows, explicitly flush file buffers after every queue operation to minimize exposure to various loopholes and problems in the Windows network file sharing system. Windows users experiencing data corruption problems should consult the many articles on the microsoft.com site relating to the many possible causes. In particular, if you have W95 workstations, check out article Q148367 which discusses a patch to VREDIR.VXD. If you have a mixture of NT and W95/W98 workstations and and NT server, you may need to disable opportunistic locking to avoid a cache update inconsistancy caused by differences between the way the two types of workstations interact with the server.
9. (UNIX) XCALL MIAMEX opcode 31 (retrieve environment variable) now supports variable names up to 99 characters long. Previously the limit was only 9 characters.
10. (WINDOWS) When an error occurs while attempting to open a sequential file (which can be caused by server overload), A-Shell now uses the a lower-level Windows API function to get a more accurate error code. If you are experiencing such problems (like intermittant protection violation or locking errors while opening a sequential input file) then you should probably use SET TRACE SYSERR ON to force A-Shell to report the lower level error code via a dialog box. This may help identify the true source of the problem.
11. INFLD now supports the TYPE string "d|F|O" to return today's date with no wait or display. A bug with opcode 28 and "D|h" was also fixed.
12. (UNIX) COMPIL (OCMPIL and COMPLP) now support source programs with either LF or CRLF line terminators, thus allowing source programs to be binary transferred from AMOS/Windows to UNIX so as to preserve the size and hash.
13. PolyShell enhancement to -l2 switch behavior. Previously, it caused a 2nd session to be launched only the first time that the swap key was struck. Now, the swap key will launch a 2nd session whenever there is currently only one session open. (Thus it works after a 2nd session has been opened and closed.) 14. PolyShell switch -1 added to prevent the user from using the swap or poly key to launch a 2nd session. (This sort of contradicts the whole point of PolyShell, but may be useful in situations where you want a uniform PolyShell environment but you don't want particular users to accidentally launch multiple sessions and thus get confused.)