This section contains an alphabetic list of the most common error conditions and messages that can occur, or be displayed by A-Shell, along with explanations and possible causes. Note that most of these messages are stored within sys:errmsg.<lan> and thus are subject to change, particularly if <lan> is not "USA." Also see the troubleshooting topic in Printer Configuration for printer-related troubleshooting tips.
A-Shell ?-node license already in use
A-Shell when used on PC networks or UNIX is licensed on a per-node basis. The number of simultaneous users allowed is dependent on the security key used to install A-Shell. This error will be displayed if a new node attempts to start an A-Shell session and all node licenses are already in use. Contact your dealer or MicroSabio to purchase additional licenses.
In some cases, node licenses can be used up by jobs that no longer exist, but which failed to exit gracefully. The first step in diagnosing this problem is to use SYSTAT to display the list of jobs logged into A-Shell. Under UNIX, SYSTAT will identify and flag "phantoms" and "zombies". (Phantoms are jobs that are logged into A-Shell but which no longer exist at the OS level. Zombies still exist at the OS level, but they are in a nether state between life and death, and need to be helped into the digital afterworld.) SYSTAT/K/Z will automatically remove them, freeing up the node licenses used by them.
Under Windows, it is more difficult to identify jobs which no longer exist. If you can't recognize them directly, one technique would be to use the JSTAT command. If the job is not responding, it will display [time out] on its status line while querying the job. JSTAT.LIT also reports what the job was last doing, whether it is executing any commands, keyboard operations, etc., all of which can help you identify jobs that are no longer running.
You can remotely abort a job that is stuck in some kind of an unresponsive state using the KILL command with the /K switch. If that doesn't work, or if it doesn't succeed in freeing all of the resources left by the job, you can use the QUTL command ("ZAP" option).
The ABOUT command will display information about the number of jobs in use and node licenses used up, which can help you evaluate if you are making any progress with the above techniques.
In small systems, or if all else fails, the simplest approach may be to just ask everyone to exit from A-Shell, and then manually erase the jobtbl.sys and qflock.sys files which are found in the same directory where miame.ini file is (typically /vm/miame or C:\VM\MIAME). These files are automatically removed by the last user to exit (provided no one crashed without exiting properly), and they are automatically re-created as needed. Some sites insert an erase command for these files into the boot process for the server, so that you can be sure of having a clean job table after a hard reboot.
A-Shell out of memory
This error is displayed on entering A-Shell, and is distinct from the BASIC-type ?Out of memory error. A-Shell was unable to allocate a partition of the size requested by the MEMORY command in the A-Shell configuration file from the available operating system memory. This partition is used as A-Shell’s workspace, but unlike under AMOS, it is not used to load programs. (Programs are loaded in dynamically allocated memory.) Under Windows and UNIX, it is unlikely that you will ever see this message. If you do, then the chances are that the machine really does require more physical memory (or that your MEMORY command is crazy.) Note that you can dynamically change the size of your memory partition with the MEMORY.LIT command.
A-Shell partition too small for file buffers
In order to keep track of open files, A-Shell maintains a number of internal buffers, and additional buffer space for ISAM 1.x files. The number of these is specified with the FILES command in the A-Shell configuration file, and they are allocated within the A-Shell memory partition. The size of the A-Shell memory partition is given by the MEMORY command in the configuration file. If this error appears, either increase the size of the memory partition, or reduce the number of data and ISAM buffers required.
Access Denied
If you get this error during an attempt to write to a file (and/or your program aborts with Error 24), then see "Write protected." . If you get an "Access Denied" pop-up error message when printing to a Window shared printer, you may need to create a local port which points to the network device. To do this, use the Add Printer wizard, select Local Printer (not network), then choose the option to add a local port, and enter the printer’s network share name (e.g. \\server\printer).
In general, this error indicates (rather obviously) that you do not have sufficient privileges to perform the specified action. Both UNIX and Windows (under the NTFS file system) have mechanisms for assigning access privileges to files, programs, directories and other resources. Consult your operating system documentation, and also A-Shell Installation for further details.
Cannot create instance
This error indicates that A-Shell is not able to add a record to the jobtbl.sys file, which is normally created and managed in parallel to the qflock.sys file, whose location is specified in the QUEUE property of miame.ini. The most likely problem is that you don’t have sufficient user privileges to write to the file (or to create the file by writing to the directory), or that the file has become inaccessible due to some network problem. If you can’t fix the privilege problem directly, then the best solution may be to ask everyone to exit A-Shell, and then erase both jobtbl.sys and qflock.sys. They will be recreated automatically by the next user to launch A-Shell.
Cannot open A-Shell queue system
The queue file specified in the QUEUE line of the A-Shell configuration file could not be opened. Full read/write access permission is required by all users of A-Shell both to the directory in which this file resides, and to the file once it is created. Note that in addition to the queue file (normally qflock.sys) there is also a file called jobtbl.sys which is created and managed in parallel with qflock.sys. See notes for Cannot create instance above.
Compiler reports an absurd number of syntax errors
There are two common causes of this. The first is that you are using COMPIL or COMPLP on a program that contains ISAM 1.x statements. Since these two variations of the compiler assume by default that the only ISAM is ISAMPlus, they will complain about every ISAM statement. You can solve that problem by either using OCMPIL, or adding the /I switch to COMPIL or COMPLP. Note that all three of these LIT files are identical, but work differently by looking at their own name. Thus, renaming OCMPIL to COMPIL does not work. However, if you prefer to use the command COMPIL but have it act like OCMPIL, the trick is to erase COMPIL.LIT and instead make a compil.do[2,2] that executes OCMPIL.
Compiler reports many errors; how do I stop display?
Since the operation of ^S and ^Q is dependent on various operating system settings and thus may not be operational within A-Shell, the best way to stop the compiler (or any other scrolling display) is to use the PAGE utility. For example:
.PAGE COMPIL MYPROG
This will cause the display to stop and wait for you to hit Return (or Q to quit) after each screen full.
Cannot open company name file
The company name file specified in the CONAME line of the A-Shell configuration file could not be opened. If A-Shell is being run for the first time, then it will be attempting to create the file, so ensure that you have file write access to the directory. If A-Shell is not being run for the first time, then check that the file exists and that you have file read access to it.
Configuration file not found
The A-Shell configuration file (usually miame.ini) could not be found. Ensure that the environment variable MIAME has been set correctly, or that the correct path has been specified with the -i switch to A-Shell.
Ctrl+S and Ctrl+Q do not work (to stop scrolling)
See Compiler reports too many errors to see (above).
Disk is full; what can I erase?
The first file to check is opr:spool.log), which contains a log of every print request made (since the file was last erased) and which can grow rather large rather quickly on systems that do a lot of spooling. You should arrange for a daily or weekly procedure to erase that file. (As of the 4.7 release, the spool.log file will be automatically archived when it reaches 3MB. Up to 4 archived copies – spool.001 thru spool.004 will be kept, with the oldest erased to make room for the newest.) Another A-Shell log file which can be erased (assuming of course that you don’t care about the contents) is ashlog.log which will be found (assuming it exists) in the same directory where miame.ini resides. (This location may be overridden by the LOGDIR statement in miame.ini.) (It also gets archived up to 4 times as just described for spool.log. Beyond that, obviously you need to look at the temporary files created by your application. If you are running under UNIX, you can get a quick overview of how full the filesystems are with the df –v command (e.g. .HOST df –v), although SYSTAT will also show how many blocks are available in the filesystems used by your logical devices. (Note that running out of disk space in the root filesystem of a UNIX machine is something you want to avoid at all cost, thus it is very wise to put your application in a separate filesystem so that at least it will never cause the OS to crash just because your program goes crazy producing output.) If df –v indicates a full filesystem but you can’t figure out which files are responsible, try using the UNIX du utility to list the size of each directory. (Since there are many, you may want to pipe that to a file and then sort it so you can narrow down your search.)
Ersatz definition file not found
This is displayed on entering A-Shell if the subject of an ERSATZ command could not be found. Check that the file exists and that you have file read permission in order to access it.
Ersatz device specification is not formatted properly
An ERSATZ definition line in one of the files specified by an ERSATZ command is not in the correct format. The correct form is:
OPR:=DSK0:[1,2]
or
OPR2:=DSK0:
The usual cause is that one or both colons have been omitted. Note that the CPU number field for networked computers is not supported.
Form feed problems (too many or too few) while printing
Under UNIX, these are generally caused by printer filters that have their own inscrutable logic for form feed generation. When all else fails, you can take matters into your own hands by configuring the printer to use a filter that outputs absolutely NO trailing formfeeds under any circumstances. For SCO, we supply one on our web site called ‘dumbnoff’ which you can copy to your printer interfaces directory (/lp/spool/lp/model). Then, add AUTOFF=ON to your A-Shell printer INI file. This will cause A-Shell to take over the job of adding a trailing formfeed when required by your spooler switches. Refer to the discussion on Printer Configurationfor more details.
File specification error
This error can be generated by any A-Shell .LIT command program if a file specification was given on the command line that does not conform either to the DevPPN file specification format or to the host machine pathname format. See Printer Configuration and its subtopics for information on specifications for files and directories, etc.
Illegal command in MIAME.INI
The A-Shell configuration file contained an unknown command. Check the spelling of all commands, and that the commands themselves (to the left of the equal sign) are given in upper case.
Incompatible version of qflock; remove after all users exit
Occasionally a change is made to the queue system record layout to accommodate new information. When this happens, the queue version number is updated. Whenever an instance of A-Shell is launched, it checks its own latest queue version number against that version number of the qflock.sys and jobtbl.sys files which are actually in use, and if they differ, you get this message. As the current users exit, the last one out will erase the qflock.sys and jobtbl.sys files, assuming there are no phantom or corrupted records in it. If they do not go away even after you are sure all users are out, you can erase them manually.
If you want to test a new version of A-Shell without interfering with people running an older version, then you can always specify a different miame.ini on the A-Shell startup command line; see Specify INI File. Within that miame.ini you can specify a different name in the QFLOCK parameter.
Infinite loop corruption in A-Shell queue system
In theory, this error should never be displayed. However, it is possible for A-Shell to be fooled into thinking this is the problem when in fact the problem is insufficient privileges to write to the queue file. Check the privileges of the qflock.sys file (whose location is specified in the miame.ini QUEUE statement.) One scenario where the privileges prevent you from writing to it would be if the superuser created the file (i.e. was the first A-Shell user). If you cannot fix the privileges for the existing qflock.sys file, have everyone exit A-Shell, then manually remove the qflock.sys and jobtbl.sys files and then relaunch A-Shell.
Invalid # terminal rows or columns to initialize TRACKER
This may happen under UNIX when the terminal type—as determined by the TERM environment variable—is not one of the built-in types. For normal terminal sessions, the problem may require you to adjust your terminal emulator to use a different emulation. This would mainly be an issue for non-ATE terminal emulators. In the case of a background session, perhaps launched by cron, the solution is probably to use the command line switch -td dumb. Also see Selecting a Terminal Emulation and Background Jobs.
Language definition file not found
This is displayed on entering A-Shell if the language file (usually with .LDF extension) could not be opened. Check that the file exists and that you have file read permission to be able to access it.
License does not match operating system version
A-Shell licenses are specific to a particular operating system. You would get this error if, for example, you tried to use an A-Shell/Windows license to run A-Shell/UNIX. If you wish to migrate to another operating system, contact your dealer or MicroSabio to have your license converted. (There is a nominal charge for this.)
JOBTBL Full! (Increase MAXJOBS setting in miame.ini.)
The job table is a file called jobtbl.sys which is automatically generated whenever A-Shell is launched and the file is not already in existence. Its size is computed to allow for some reasonable multiple of the number of licensed nodes, but if you run a lot of jobs that do not count against the license (such as background jobs or PolyShell jobs), then the computed number may be insufficient. In that case, you can add a MAXJOBS=## statement (which see in the Configuration section) to miame.ini to specify a larger size. It is not normally necessary to get everyone out of A-Shell to make this effective – the next time A-Shell is launched it should detect the new size and expand the file.
Msg #,# (sys:<filename>)
This occurs when the message number (#,#) is not found in the message file whose name is in the (parentheses.) Usually this is because you updated the A-Shell executable but not the message files, and the new version of A-Shell is trying to use a new message that wasn’t previously there. In that case, just download the latest A-Shell release to get the latest message files. Another possibility is that the message file has become corrupted. To check, just VUE it and then resave it. A third possibility is that your language definition file is not right, and so A-Shell is trying to use a non-existent message file extension. If the <filename> mentioned in the message does not exist, check your LANGUAGE= statement in miame.ini to make sure that it references a valid language definition file. If it is simply a matter of you using a language file that we don’t provide a set of messages for, copy one of the others (with the same filename and different extension) to the desired extension, and then you will at least have messages (although perhaps not in the desired language.) Feel free then to use VUE to edit the message file and translate the messages.
Operating in demonstration mode
This warning is displayed on entering A-Shell if demonstration mode is enabled. Thereafter a license warning banner will be displayed periodically explaining that you are breaking software licensing agreements and guilty of software theft if this copy of A-Shell is being used for any purpose other than demonstration or evaluation. Demonstration mode is enabled either if serial number of 0000 was entered during installation, if the wrong serial number/security key was entered, or if the contents of the company name licensee file specified with the CONAME command in the A-Shell configuration file has been changed. See LICENS for information on entering a valid security key.
This is a standard BASIC-type error (BASIC error 3), and is distinct from the ?A-Shell out of memory error. It occurs when attempting to run a program which runs out of memory in the job's memory partition, the size of which is established by the MEMORY command in the A-Shell configuration file. You can also change the memory partition size dynamically with MEMORY.LIT or with the MX_MEMORY function.
The memory partition is used for a variety of purposes, including storing program variables, command files during execution, expression and function parameter stacks, and string manipulation. Since the RUN program itself is loaded into dynamically allocated memory, a large RUN file would not be directly responsible for out of memory. However, large RUN programs tend to have large numbers of variables, which will take up memory partition space.
Expressions involving manipulation of large string variables can consume a lot of memory and are a common cause of ?Stack overflow (BASIC error 33) or ?String overflow (BASIC error 54).
Dynamic Arrays (DIMX) operations do not use the memory partition. If you receive an out of memory error in a DIMX statement, it is because the operating system is unable to provide the requested amount of memory at that point in time; increasing your memory partition size will not help—and may make it worse by effectively taking that memory out of the system pool.
You use the MEM(0) function within a running program to monitor the amount of memory available in the memory partition.
"Queue blocks" (which are actually records in a shared file called qflock.sys) are used primarily by FLOCK.SBR and XLOCK.SBR, and some developer-specific variations of them, as a scheme of keeping track of, or controlling access to, shared resources (e.g. record and file locks). If you are running out of them, either the qflock.sys file is too small, or your application is not freeing up the queue blocks that it uses.
The size and location of the file is defined by the QUEUE statement in miame.ini. The file is automatically created when the first A-Shell user starts up, and automatically deleted when the last user logs out. That system can be foiled by "phantom" jobs that never log out. If such is the case, and particularly if one of those phantom jobs has allocated queue blocks and never released them, you need to either remove the phantom jobs, manually clear the locks from the qflock.sys, or get all the real users out and then erase both qflock.sys and jobtbl.sys (which will be in the same directory).
Comments and debugging suggestions:
• ABOUT will show you which miame.ini file you are using.
• VUE %MIAMEFILE% will allow you see and edit the current miame.ini file (to determine where the qflock.sys file is, and possibly to increase its size). Note however, that any changes to the QUEUE statement will not take effect until all users have exited and the existing qflock.sys is deleted.
• QUTL has options to display the queue block usage, both in the form of summary totals, and in detailed lists of the locks by type and by user. It also has an option to "zap" a user (remove the user from the system and release the locks held by it). This is one way to get rid of "phantom" jobs.
• SYSTAT/W will display how long each job has been logged in. This is useful for identifying jobs that have been abandoned (i.e. anything over 24 hours might be suspect, at least for a normal, non-background job).
• See the subroutines XLOCK and FLOCK and the LIT programs ABOUT, SYSTAT, and QUTL.
• If you suspect that an application is not freeing the locks that it requests, one way to study it would be to activate the subroutine trace (with SET TRACE XCALL ON or by opening the debug message window and using the properties dialog). This will trace all of the subroutine statements, which would allow you to see just what an application is actually doing in terms of requesting and releasing locks.
Printer not defined to workstation
See Windows printer [ptrname] not defined to this workstation.
Printing problems under Linux
Linux systems are often configured by default to use the "ghostscript" printer filter, which is often too smart for its (or our) own good. Some things that can throw it into a spin are print files whose final line does not have an LF on the end, or files with embedded escape sequences. The best way to solve these problems is to change your printer configuration (under Linux) to use a null (or text or raw) driver.
Print spooling with PREFIX, SUFFIX or AUTOFF doesn’t work
One possibility is that you do not have sufficient privileges to write to the directory where miame.ini resides. The above spooling options cause temporary files to be created in that directory, and if the directory cannot be written to, the operation will fail. Other suggestions are to use the .SET TRACE LP ON command to display detailed information about the various steps involved in printing (possibly clarifying where it is failing) and to look at the opr:spool.log) file to see if it contains any useful error messages.
RUN file format bad or incompatible
2011 August, A-Shell 5.1.1228: Improved handling of "RUN file format bad or incompatible" error: the first time this error occurs, the module is re-loaded from disk. If it happens again, then the error is reported. This helps eliminate rare situations where an updated SBX gets loaded before it is full written to disk, or where some other mishap has caused the copy of a program in memory to become corrupted even though the one on disk is good. Such events are always logged though.
Security key is invalid
The security key is stored on the first line of miame.ini. The format of the line is:
SERIAL=####kkkk-kkkk-kkk-kkkkkk-kkkkkkkk ;comment
#### is your serial number and the kkk… represents your security (or license) key.
The most likely cause of this error is that the line has become corrupted, due to either manual editing or some other mishap. It is also possible that the CONAME file (referenced by the CONAME statement in miame.ini) has changed, since its contents are tied to the security key. If you have your original license key written down, you can re-enter it (from the dot prompt) using LICENS. Note that if your miame.ini appears corrupted, you may need to first manually clean it up before it can be properly updated. To do this, use your favorite text file editor and set the first line to:
SERIAL=0999NXXXXXXXXXXXXXXXABCD ; license key
Make sure to include several spaces between the ABCD and the semicolon.
Specified job name <job> already exists
This could occur for one of three reasons. The first is that you are specifying a job name via the -j switch to A-Shell (or PolyShell). The second is that you are using TRMDEF statements in miame.ini to assign job names, and A-Shell is not generating "unique enough" device identifiers (possibly due to an incorrect CONSOLE statement.) The third is that the specified job has partially crashed but still exists in the job table. Under UNIX, A-Shell will prompt you directly to see if you want to kill the conflicting job, which usually takes care of the problem. Alternately, you can have another user (who is already in A-Shell and can get to the dot prompt) execute SYSTAT/K/Z to clear any zombies or phantoms. Under Windows, this is not possible, but you can still have another user remove the dead job with QUTL. Or, you can just specify the -j switch with a known-unique job name.
Reviewed January 2009
This is equivalent to BASIC Error 33, and is a special case of the more general Out of memory error.
The A-Shell stack occupies the free memory space within the user partition, and is used for local variables (within functions and procedures) as well as for working copies of variables involved in expression evaluation. The error is typically caused by one of the following three conditions:
• The memory partition is simply too small to accommodate the program. In this case, it is equivalent to the Out of memory error; in fact, the same situation might result in either error, depending on whether the lack of memory is noticed at the start of a BASIC instruction or in the middle of it.
• You've exceeded the number of open files defined by the FILES system parameter statement.
• The program has an infinite recursive loop (such as a function that calls itself). The only solution for this is to fix the logic error.
String Overflow
String overflow (BASIC error 54) is similar to Stack Overflow and occurs when there is insufficient memory in the job's memory partition to handle an expression or operation involving large strings. See the discussion of the more general Out of memory error for further information.
This update of A-Shell not covered under your license
This error will occur if you update your copy of A-Shell with a version that was released after the maintenance expiration embedded in your license key. To check your maintenance expiration before downloading an update, you can use ABOUT from the A-Shell command prompt, or in the case of Windows, you can also display the Help...About dialog box. The release date of the update will be displayed on the web page along with the update file.
Note that the maintenance expiration does not limit you from running your currently licensed version of A-Shell. It only prevents you from running a new version generated after the maintenance expiration. To avoid this problem and gain access to all updates, at all times, contact your dealer or MicroSabio to renew the maintenance on your license annually.
Too many sessions originating from same source address!
This message may occur with ATS (A-Shell Telnet Server) and indicates that you have too many open sessions originating from the same device, or sharing the same IP address. ATS is somewhat more flexible that other A-Shell versions in allowing multiple sessions to share a single node license if they originate from the same device, but since this could be abused by running many terminals through a single terminal server or other proxy service, there is a limit (typically about the same as the number of licensed nodes.)
Unable to load <name> control
Added December 2012
A-Shell loads a number of DLLs dynamically as needed to implement certain control types (XTEXT and XTREE being two examples). The search path for such DLLs starts in the directory where ashw32.exe was loaded from (typically c:\vm\miame\bin), and this is where we keep all of the DLLs released with A-Shell (so as to avoid conflicts with other applications which may be using different versions of the same DLLs). When A-Shell encounters an error loading one of its DLLs, it will make a second try to load it from an alternate location:
C:\Program Files (x86)\Common Files\A-Shell\ (64 bit systems)
or
C:\Program Files\Common Files\A-Shell\ (32 bit systems)
This directory does not normally exist, so the second try will not have any effect unless you set it up. The only reason why you would do such a thing is if you are experiencing the rare error condition where it reports that the DLL cannot be loaded because it is in use. Most likely the cause would be some antivirus software, or backup software or something else on the system that is gaining exclusive use to the library long enough to block other users. But if the cause cannot be resolved directly, you can work around it by creating the alternate directory above and putting a second copy of the affected DLLs into it.
History
2012 December, A-Shell 6.1.1326: Added alternate paths to search sequence
Unable to initialize ODBC environment
This error only applies to A-Shell for Windows when it has been linked with the ISAM Plus to ODBC interface. The ODBC manager has not been installed correctly on the workstation. In order to install ODBC, use Microsoft’s ODBC administration programs, odbcadm.exe, or odbcadm32.exe. Test access to the SQL data source using Microsoft Query.
Warning: instance already exists for [??????] - over-writing
A-Shell stores user information for each session or instance of A-Shell in the jobtbl.sys file. This warning means that an entry already exists in the queue file with the same unique identifier as the one now being used. The most common cause of this is that your last session of A-Shell ended in an unclean manner, for example if the PC crashed or hung in a network situation. In these cases, the message is for information only, and can be ignored. If the warning persists, or recurs regularly when all sessions end cleanly, then the unique identifiers need to be checked. Under UNIX, check the CONSOLE and TRMDEF commands for correctness. In a PC network situation, check that unique names have been assigned to each workstation. Also, attempting to use a standalone, 1-node license version of A-Shell in a networked environment will cause this error, and A-Shell will fail.
Warning: maximum no. aliases exceeded
This is displayed on entering A-Shell if too many subroutine aliases have been defined in miame.ini with the ALIAS command. Aliases up to the offending one will function correctly. The number of aliases will have to be reduced, or some of the routines re-coded in C.
Warning: maximum no. ERSATZes exceeded
This is displayed on entering A-Shell if too many ERSATZ devices have been defined. ERSATZes up to the offending one will function correctly. Remove some ERSATZ file references completely from the configuration file, or try to create some cut-down ERSATZ files which contain only the devices really needed. As of version 4.7, the maximum number of ERSATZ specifications is 400 for Windows/32 and UNIX.
Warning: nested include statements not permitted
This is displayed on entering A-Shell if a file which is the subject of an INCLUDE statement itself attempts to include another file. Restructure the files so that only one level of inclusion is used.
Warning: standalone mode for network license disables locking
This is displayed on entering A-Shell purely as a reminder. The copy of A-Shell has been installed with a multi-node network license, but has been forced to run in standalone mode with the -s command line switch. This will disable multi-user functions such as locking, but temporarily disables the need to set a computer name.
Windows printer [ptrname] not defined to this workstation
This can mean one of two things. Either the application attempted to print a file to the explicitly named printer [ptrname], and no printer init file (either or sys:ptrname.ini or ashcfg:ptrname.pqi) was found, or the printer init file was found, but the DEVICE name it specifies does not match any of the printers known to Windows on this workstation. Note that the reason these two cases report the same error message is that if the printer init file is not found, A-Shell auto-defines one on the fly, with DEVICE=[ptrname]. (This feature eliminates the need for printer init files in many cases.) If unclear why the printer [ptrname] does not match any of the defined printers on this workstation, refer to Troubleshooting Techniques in the Printer Configuration section.
Window instance exceeds the limit defined in your config file
This would occur if the number of A-Shell sessions you have running on your PC exceeds the limit specified by the MAXINST statement in miame.ini. Try increasing that, or closing some of you’re A-Shell windows.
Write protected error (BASIC Error 24)
This error (or a variation of it, such as "Access Denied") will occur if you do not have write permission for the file or directory you are trying to write to. One cause of this is copying files from a CD. (Files on a CD often have the read-only attribute set, and some methods of copying files under Windows may not clear that bit.) If there are just a few files affected, then you can fix them (under Windows) by locating them in Explorer, right clicking, and clearing the read-only check mark. This is not convenient if you have many files with the problem. In that case, open a Command Prompt (aka "DOS") window, use the CD command to change to the proper directory, and use the ATTRIB –R command. (This will clear the read-only flag on all the files and subdirectories within the current directory.) Repeat this for all the affected directories.
If the problem occurs under UNIX, then login in as root (or use the su command), cd to the relevant directory, then use chmod –R +w * (or some variation of the chmod command, such as chmod 666 to reset the privileges for one or all of the affected files. Refer to File Ownership and Privileges for further information.
Your job queue has been zapped; exit A-Shell now
Reviewed January 2009
Short version
This occurs when someone deletes the qflock.sys and/or jobtbl.sys files (or at least clobbers your entry within the latter, perhaps with the QUTL command) while you are running. A-Shell does not notice the problem until it has reason to update the queue (such as when chaining between programs or logging to a new PPN.) If this problem happens every time you launch a second session, then the problem is most likely that A-Shell is not able to generate a unique device identifier due to a problem in your CONSOLE statement in miame.ini.
Long version
The message indicates that another job has overwritten the current job's job-control-record. (Each job has a record in the jobtbl.sys file where it stores a variety of current status information about the job; this is the primary source of information used by SYSTAT, JSTAT, and most subroutines that request information about a job.)
When a new instance is started, A-Shell generates a (hopefully) unique ID for the instance, then scans the JOBTBL to see if there is already a record for it (which happens when a workstation crashes or is rebooted without exiting A-Shell), if so, displays a brief warning message on the screen and in the log, and then re-uses the record.
You can see the instance identifiers using SYSTAT/C (3rd column). Generally they consist of 2 parts separated by a colon: an identifier of the workstation (like a machine name or possibly an IP address), plus an instance number (01, 02, etc.) to separate the instances of A-Shell coming from the same workstation.
For example:
.systat/n/c
Status of A-Shell/32 Ver. 5.1.1134.2 on Friday, January 09, 2009 15:22:26
TSKAAA TSKAAA JACKT400:01 DSK0:1,4 RN SYSTAT 2912 986K bytes
TSKAAB TSKAAB JACKT400:03 DSK0:150,277 RN MYDOC 5464 939K bytes
TSKAAE TSKAAE JACKT400:05 DSK0:150,277 ^C VUE 6892 1502K bytes
This shows 3 instances, all coming from the machine whose name is "JACKT400", and each with a separate instance # (01, 03, and 05).
In some particular environments, such as Terminal Server, or CGI, or when launching A-Shell sessions from another application, it may be necessary to ask A-Shell to add a numeric suffix (-###) to the machine name (and prior to the instance number) in order to prevent duplicates. There are two ways to accomplish this: add OPTIONS=NTTS to miame.ini, or add the -awts switch to the A-Shell launch command line.
Besides SYSTAT/C, the best tool for analyzing this problem is the ashlog.log file, provided you add TRACE=INOUT,SIGHUP,BASERR to miame.ini (which is recommended as standard procedure.) This will cause A-Shell to log an entry for each session started and ended, along with the ID name, job number, user login, and license utilization information.