Compaq BASIC for OpenVMS
Alpha and VAX Systems
User Manual


Previous Contents Index


Appendix B
Run-Time Messages

BASIC returns run-time messages if an error occurs while a program is executing. The error is diagnosed and for programs without line numbers, BASIC indicates the program line that generated the error. Warning messages indicate that an error has occurred, but program execution continues. In some cases, VAX BASIC prompts again for more information or correct data. In other cases, BASIC performs the specified operation, but the results are not as expected. Fatal (severe) error messages indicate that the program has aborted. You can recover from most fatal errors by including error-handling routines in your program and by specifying OPTION HANDLE = SEVERE. Certain errors, however, are not recoverable even when error-handlers are used. In the descriptions of these errors, they are designated as not able to be trapped. You do not need error-handling routines to trap errors that generate warning messages.

Section B.1 lists BASIC run-time errors, alphabetized by mnemonic code. Section B.2 is a cross-reference numerical listing of run-time errors generated by BASIC. Section B.3 lists messages that BASIC does not generate, but which can be displayed with the ERT$ function. See the Compaq BASIC for OpenVMS Alpha and VAX Systems Reference Manual for information about RMSSTATUS and VMSSTATUS.

B.1 BASIC Run-Time Errors by Mnemonic

The BASIC error message format is as follows:

%BAS-<l>-<mnemonic>, <message> -BAS-I-FROLINMOD, from Line x in module y

<l>

Is a letter indicating the severity of the error. The severity indicator can be one of the following:

<mnemonic>

Is a 3- to 9-character string that identifies the error.

<X>

Is the line number where the error occurred.

<Y>

Is the name of the module where the error occurred.

Warning error messages indicate that an error has occurred, but program execution continues. In some cases, BASIC reprompts for more information or correct data; in other cases, BASIC performs the specified operation, but the results are not as expected. Fatal error messages indicate that the program has aborted.

ARGDONMAT, Arguments don't match (ERR=88)
Explanation: The proper array descriptor was not specified for a matrix operation.
User Action: Use BASIC to create the array.

ARGTOOLAR, Argument too large in EXP (ERR=49)
Explanation: The program contains:


User Action: Change the EXP argument to be in the valid range, or reduce the size of the exponent.

ARRMUSSAM, Arrays must be same dimension (ERR=238)
Explanation: The program attempts to perform matrix addition or subtraction on input arrays with a different dimensions.
User Action: Use arrays that have identical dimensions.

ARRMUSSQU, Arrays must be square (ERR=239)
Explanation: The program attempts matrix inversion (MAT INV) on an array that is not inversible.
User Action: Use only square arrays when performing a matrix inversion.

ARRTOOSMA, Array too small (ERR=197)
Explanation: The array you referenced with a graphics statement is too small. Check the description of the graphics statement to get the minimum size requirement for the array.
User Action: Increase the size of the array.

BADDIRDEV, Bad directory for device (ERR=1)
Explanation: The device directory does not exist or is unreadable.
User Action: Supply a valid directory.

BADRECIDE, Bad record identifier (ERR=143)
Explanation: The program attempted a record access that specified:


User Action: Change the record number or key specification to a valid value.

BADRECVAL, Bad RECORDSIZE value on OPEN (ERR=148)
Explanation: The value in the RECORDSIZE clause in the OPEN statement either 1) is zero or greater than 65,535 or 2) does not match the record size of an existing file.
User Action: Change the value in the RECORDSIZE clause.

CANCHAARR, Cannot change array dimensions (ERR=240)
Explanation: The program attempts to redimension an array to a different number of dimensions.
User Action: Change the arrays dimensions in the DIM or MAT statement.

CANFINFIL, Cannot find file or account (ERR=5)
Explanation: The specified file or directory is not present on the device.
User Action: Supply a valid file specification.

CANINVMAT, Cannot invert matrix (ERR=56)
Explanation: The program attempts to invert a single-dimension matrix.
User Action: Supply a matrix of the proper form for inversion.

CANOPEFIL, Cannot open file (ERR=162)
Explanation: The program attempts to open a file that cannot be opened.
User Action: Use VMSSTATUS to determine the RMS failure that caused the error.

CLIPONOFF, Clipping must be set to ON or OFF (ERR=259)
Explanation: Valid strings for the SET CLIP statement are "ON" and "OFF."
User Action: Change the string to either "ON" or "OFF."

COLNOTCON, Color indices are not contiguous (ERR=261)
Explanation: The color indices on the device you are using are not contiguous.
User Action: Unlike most devices, all color indices between zero and the number returned by the ASK MAX COLOR statement are not available on this device.

COONOTNDC, Coordinates are not within NDC space (ERR=273)
Explanation: The boundaries of NDC space are 0,1,0,1; coordinates must be within this range.
User Action: Supply coordinates with values from 0 to 1. Make sure that the minimum value of x is less than the maximum value of x and that the minimum value of y is less than the maximum value of y.

CORFILSTR, Corrupted file structure (ERR=29)
Explanation: RMS has detected an invalid file structure on disk.
User Action: See your system manager.

DATFORERR, Data format error (ERR=50)
Explanation: The program specifies a data type in a statement that does not agree with the value supplied or invalid data was used in string arithmetic.
User Action: Change the statement or supply data of the correct type.

DATOVERF, data overflow (ERR=289)
Explanation: The keystroke retrieved by the INKEY$ function caused the type-ahead buffer to overflow or the terminal attempted to send a valid ANSI escape sequence that did not correspond to a keystroke.
User Action: Specify the DCL command SET TERMINAL/HOSTSYNC before using the INKEY$ function. This command will prevent the type-ahead buffer from overflowing.

DATTYPERR, Data type error (ERR=101)
Explanation: The program attempts to access a parameter passed BY DESC (by descriptor), and the descriptor contains an incorrect data type. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: Check the program code that created the passed parameter and make sure it creates a parameter of correct data type.

DEADLOCK, Detected deadlock while waiting for GET or FIND (ERR=193)
Explanation: The record your program is trying to access is currently locked on another channel or by another process. Simultaneously, your program has locked a record that the other user cannot access. The deadlock cannot be resolved.
User Action: Possible solutions include:

DECERR, DECIMAL error or overflow (ERR=181)
Explanation: The result of a DECIMAL expression is greater than or requires more precision than can be contained in the variable.
User Action: Reduce the magnitude of the expression or increase the allowed digits in the DECIMAL variable.
User Action: Check program logic or trap the error in an error handler.

DEVHUNWRI, Device hung or write locked (ERR=14)
Explanation: The program attempted an operation to a hardware device that is not functioning properly or is protected against writing.
User Action: Check the device on which the operation is performed.

DEVINMET, Device is an input metafile (ERR=270)
Explanation: The operation cannot be performed on an input metafile (device type 3).
User Action: Specify the device ID for a device other than an input metafile.

DEVNOTOPE, Device is not open (ERR=268)
Explanation: The device has not been identified in an OPEN...FOR GRAPHICS statement.
User Action: Specify the device ID number in an OPEN...FOR GRAPHICS statement.

DEVOPEINC, Device and operation are incompatible (ERR=272)
Explanation: The operation you requested cannot be performed on the specified device. For example, output cannot be dislayed on a device that is for input only.
User Action: Specify the device ID for a device with the appropriate compatibility. Device types are listed in Programming with VAX BASIC Graphics.

DEVOUTMET, Device is an output metafile (ERR=269)
Explanation: The specified device is an output metafile (device type 2).
User Action: Specify the device ID for a device other than an output metafile.

DEVTYPNOT, Device type is not supported (ERR=267)
Explanation: The specified device type is not supported by Compaq GKS for OpenVMS.
User Action: Specify an alternative device type. Standard supported device types are listed in Programming with VAX BASIC Graphics and in the Compaq GKS for OpenVMS documentation. Verify with your system manager that support for the specified device has been installed. Also, verify that the Compaq GKS for OpenVMS startup command procedure has properly executed.

DIFUSELON, Differing use of LONG/WORD or SINGLE/DOUBLE qualifiers (ERR=229)
Explanation: The main and subprograms were compiled with different LONG/WORD modes. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: Recompile one of the programs with the same qualifier as the other.

DIMOUTRAN, Dimension number out of range (ERR=195)
Explanation: The upper or lower bound of the specified dimension cannot be returned because the array has fewer dimensions than the one requested.
User Action: Change the dimensions specified with the LBOUND or UBOUND function.

DIRERR, Directive error (ERR=253)
Explanation: A system service call resulted in an error.
User Action: See the VMS I/O User's Reference Volume or the OpenVMS Record Management Services Reference Manual.

DIVBY_ZER, Division by 0 (ERR=61)
Explanation: The program attempts to divide a value by zero.
User Action: Check program logic and change the attempted division or trap the error in an error handler.

DUPKEYDET, Duplicate key detected (ERR=134)
Explanation: In a PUT operation to an indexed file, a duplicate key was specified, and DUPLICATES was not specified when the file was created.
User Action: Change the duplicate key, or recreate the file specifying DUPLICATES for that key.

ECHTYPNOT, Prompt/echo type not supported (ERR=256)
Explanation: The specified prompt or echo type is invalid. BASIC supports only the default prompt and echo types.
User Action: Do not change the prompt or echo type. If you do so, you should continue to use direct calls to Compaq GKS routines rather than use BASIC input statements.

ENDFILDEV, End of file on device (ERR=11)
Explanation: The program attempted to read data beyond the end of the file.
User Action: None. The program can trap this error in an error handler.

ENTPOINOT, Entered points not within a transformation (ERR=285)
Explanation: Input points are not within the viewport of a defined transformation.
User Action: Issue a warning to the user to input points within the defined area. Alternatively, you can change at least one transformation to include the viewport area not defined. At the start of program execution, transformation 1 includes all of NDC space. Optionally, you can define one transformation to cover the default viewport.

ERRFILCOR, Error on OPEN - file corrupted (ERR=178)
Explanation: The program attempted to open an invalid structure on disk.
User Action: See your system manager.

ERRTRANEE, ERROR trap needs RESUME (ERR=246)
Explanation: An error handler attempts to execute an END, END SUB, END FUNCTION, SUBEND, FUNCTIONEND, or FNEND statement without first executing a RESUME statement. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: Change the program logic so that the error handler executes a RESUME statement before executing an END, END SUB, END DEF, SUBEND, FUNCTIONEND, or FNEND statement.

FATSYSIO_, Fatal system I/O failure (ERR=12)
Explanation: An I/O error has occurred in: 1) the system or 2) Record Management Services. The last operation will not be completed.
User Action: See the OpenVMS System Messages and Recovery Procedures Reference Manual for RMS errors or retry the operation. Use VMSSTATUS to return the VMS condition code that caused the error.

FIEOVEBUF, FIELD overflows buffer (ERR=63)
Explanation: A FIELD statement attempts to access more data than exists in the specified buffer.
User Action: Change the FIELD statement to match the buffer's size, or increase the buffer's size.

FILACPFAI, FILE ACP failure (ERR=252)
Explanation: The operating system's file handler reported an error to RMS.
User Action: See the VMS I/O User's Reference Volume or the OpenVMS Record Management Services Reference Manual.

FILATTNOT, File attributes not matched (ERR=160)
Explanation: The following attributes in the OPEN statement do not match the corresponding attributes of the target file:


User Action: Change the OPEN statement attributes to match those of the file or remove the clause.

FILEXPDAT, File expiration date not yet reached (ERR=174)
Explanation: The program attempted to delete a file before the file's expiration date was reached.
User Action: Change the file's expiration date.

FILIS_LOC, File is locked (ERR=138)
Explanation: The program does not allow shared access, and attempts to access a file that has been locked by another user or by the system.
User Action: Change the OPEN statement to allow shared access or wait until the file is released by other users.

FLOPOIERR, Floating point error or overflow (ERR=48)
Explanation: A program operation resulted in a floating-point number with absolute value outside the allowable range for that data type.
User Action: Check program logic or trap the error in an error handler.

FNEWITFUN, FNEND without function call (ERR=73)
Explanation: The program executes an END DEF or FNEND statement before executing a function call. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: Check program logic to make sure that END DEF or FNEND statements are executed only in multiline DEFs or remove the END DEF or FNEND statement.

GKSNOTINS, DEC GKS FOR VMS is not installed (ERR=226)
Explanation: Graphics statements are not operational when Compaq GKS is not installed.
User Action: See your system manager.

ILLALLCLA, Illegal ALLOW clause (ERR=168)
Explanation: The value specified for the ALLOW clause (sharing) on the OPEN statement is illegal for the type of file organization.
User Action: Change the ALLOW clause argument.

ILLARGLOG, Illegal argument in LOG (ERR=53)
Explanation: The program contains a negative or zero argument to the LOG or LOG10 function.
User Action: Supply an argument in the valid range.

ILLARESTY, Illegal area style (ERR=262)
Explanation: Area style must be one of the following:


User Action: Specify a valid area style for the device.

ILLBYTCOU, Illegal byte count for I/O (ERR=31)
Explanation: A PRINT or INPUT list invoked a function that closed an I/O channel.
User Action: Change the function so that it does not close the I/O channel.

ILLCNTCLA, Illegal count clause (ERR=290)
Explanation: In a graphics statement, you specified a COUNT clause with a numeric value that exceeds the size of the array.
User Action: Specify a numeric value that is less than or equal to the size of the array.

ILLCOLIND, Illegal color index (ERR=280)
Explanation: The index you specified is not supported by the device.
User Action: Specify a valid color index. The valid range of indices for the device is from 0 to the value retrieved by the ASK MAX COLOR statement.

ILLCOLMIX, Illegal color mix (ERR=291)
Explanation: The color mix value specified on the SET COLOR MIX statement is outside the range of 0 to 1.
User Action: Specify a value from 0 to 1.

ILLDEVID, Illegal device identification number (ERR=266)
Explanation: The device identification number is beyond the valid range of 0 through 255.
User Action: Specify a device identification number between 0 and 255.

ILLDEVNAM, Illegal device name in OPEN (ERR=292)
Explanation: An explicit or implicit OPEN...FOR GRAPHICS statement contains an illegal device name for the device type being used. Possible causes include:


User Action: Specify an appropriate device name.

ILLECHARE, Illegal echo area (ERR=283)
Explanation: The specified echo area boundaries are invalid.
User Action: Specify echo area boundaries within the device viewport.

ILLEXIDEF, Illegal exit from DEF* (ERR=245)
Explanation: A multiline DEF* contains a branch to an END, END SUB, END DEF, SUBEND, or FUNCTIONEND statement. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: Change the program logic so that the program executes the multiline function's END DEF or FNEND statement before executing the END, END SUB, END DEF, SUBEND, or FUNCTIONEND statement.

ILLFIEVAR, Illegal FIELD variable (ERR=122)
Explanation: A FIELDed variable is referenced after a non BASIC subprogram closed the file associated with that variable. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: Check program logic; do not reference the variable after the file has been closed.

ILLFILNAM, Illegal file name (ERR=2)
Explanation: A file name is: 1) too long, 2) incorrectly formatted, or 3) contains embedded blanks or invalid characters.
User Action: Supply a valid file specification.

ILLILLACC, Illegal or illogical access (ERR=136)
Explanation: The requested access is impossible because:


User Action: Change the ACCESS clause.

ILLINIVAL, Illegal initial value (ERR=284)
Explanation: The current initial value specified on the SET INITIAL VALUE or LOCATE VALUE statement is beyond the range of possible values.
User Action: Specify an initial value within the default range (0 through 1) or within the alternative range you optionally specified, or change the range limits.

ILLIO_CHA, Illegal I/O channel (ERR=46)
Explanation: The program specified an I/O channel outside the legal range.
User Action: Specify I/O channels in the range 1 to 99, inclusive or one returned from LIB$GET_LUN.

ILLKEYATT, Illegal key attributes (ERR=137)
Explanation: The program specified CHANGES for the primary key.
User Action: Remove the CHANGES specification from the primary key. You can specify CHANGES only for alternate keys.

ILLLINSIZ, Illegal line size (ERR=275)
Explanation: The specified line size is less than or equal to zero.
User Action: Specify a line size value greater than zero.

ILLLINSTY, Illegal line style number (ERR=274)
Explanation: The specified line style number is less than or equal to zero.
User Action: Specify a valid line style value greater than zero.

ILLNETOPE, Illegal network operation (ERR=190)
Explanation: The program tries to mix GET and PUT operations, or PRINT and INPUT operations, on a remote terminal-format file.
User Action: Change the file organization when opening the file to be sequential variable.

ILLNUM, Illegal number (ERR=52)
Explanation: A value supplied to a numeric variable is incorrect, for example, "ABC" and "1..2" are illegal numbers.
User Action: Supply numeric values of the correct form.

ILLOPE, Illegal operation (ERR=141)
Explanation: The program attempts to:


User Action: Change the illegal operation.

ILLPICOPE, Illegal picture operation (ERR=258)
Explanation: The program attempts to change a transformation within a picture definition. The following statements are invalid within pictures and within routines that are called by pictures:


User Action: Remove any invalid statements from the picture definition. Set the boundaries for windows and viewports before a picture is invoked.

ILLPOISTY, Illegal point style number (ERR=276)
Explanation: The specified point style is less than or equal to zero.
User Action: Specify a valid point style greater than or equal to zero.

ILLRECACC, Illogical record accessing (ERR=152)
Explanation: The program attempts to perform an operation that is invalid for the specified file type, for example, a random access on a sequential file.
User Action: Supply a valid operation for that file type or change the file type.

ILLRECFIL, Illegal record on file (ERR=142)
Explanation: A record contains an invalid byte count field.
User Action: Use the DCL command DUMP to check the file for possible bad data.

ILLRECLOC, illegal record locking (ERR=187)
Explanation: The program contains an ALLOW clause on a GET statement and the file was not opened with the UNLOCK EXPLICIT clause. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: Either remove the ALLOW clause from the GET statement or use the UNLOCK EXPLICIT clause in the OPEN statement.

ILLRESSUB, Illegal RESUME to subroutine (ERR=247)
Explanation: While in an error handler activated by an ON ERROR GO BACK, the error handler attempts to RESUME without a line number. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: None; you cannot specify the RESUME statement without a line number in any program module except in the program module containing the error handler.

ILLSTYIND, Illegal area style index (ERR=279)
Explanation: The specified area style index is less than or equal to zero.
User Action: Specify a valid area style index greater than zero.

ILLSWIUSA, Illegal switch usage (ERR=67)
Explanation: The program attempts an illegal SYS call.
User Action: See the appropriate RSTS/E SYS call documentation.

ILLSYSUSA, Illegal SYS usage( ) (ERR=18)
Explanation: The program attempted an illegal SYS call.
User Action: See the appropriate RSTS/E SYS call documentation.

ILLTEXHEI, Illegal text height (ERR=278)
Explanation: The text height is less than or equal to zero.
User Action: Specify a text height greater than zero.

ILLTEXJUS, Illegal text justification (ERR=263)
Explanation: The specified text justification factor is invalid.
User Action: See Programming with VAX BASIC Graphics for valid justification values. Specify valid values.

ILLTEXPAT, Illegal text path (ERR=265)
Explanation: The specified text path is invalid.
User Action: Specify a valid text path. Valid text path values are as follows:

ILLTEXPRE, Illegal text precision (ERR=264)
Explanation: The specified precision string is invalid.
User Action: Valid precision values are: "STROKE" for software fonts, "STRING" and "CHAR" for hardware fonts. Specify a valid string for the precision value.

ILLTEXRAT, Illegal text width-to-height ratio (ERR=276)
Explanation: The specified width-to-height ratio is less than or equal to zero.
User Action: Specify a width-to-height ratio greater than zero.

ILLTFFOPE, Illegal terminal-format file operation (ERR=191)
Explanation: The program specifies a GETRFA function on a terminal-format file.
User Action: Change the file organization when opening the file to be sequential variable.

ILLTRANUM, Illegal transformation number (ERR=257)
Explanation: The specified tranformation number is less than 1 or greater than 255.
User Action: Specify a transformation number from 1 to 255.

ILLUSADEV, Illegal usage for device (ERR=133)
Explanation: The requested operation cannot be performed because:


User Action: Supply the correct device type.

ILLWAIVAL, Illegal wait value (ERR=192)
Explanation: The specified integer expression on the WAIT clause is less than zero or greater than 255.
User Action: Specify an integer expression whose value is 0 through 255.

IMASQUROO, Imaginary square roots (ERR=54)
Explanation: An argument to the SQR function is negative.
User Action: Supply arguments to the SQR function that are greater than or equal to zero.

IMPERRHAN, improper error handling (ERR=186)
Explanation: After an error has occurred, a program's error handler calls another program unit, and the called program unit executes an ON ERROR GO BACK statement before clearing the error with a RESUME statement. This error cannot be trapped with a BASIC error handler unless the program contains OPTION HANDLE = SEVERE.
User Action: Change the program logic so that the called program clears the error condition before executing the ON ERROR GO BACK statement.

INDNOTFUL, Index not fully optimized (ERR=170)
Explanation: A record was successfully written to an INDEXED file; however, the alternate key path was not optimized. This slows record access.
User Action: Delete the record and rewrite it.

INTERR, Integer error (ERR=51)
Explanation: The program contains an integer whose absolute value is greater than 127 in BYTE mode, 32,767 in WORD mode, 2,147,483,647 in LONG mode, or 9,223,372,036,854,775,807 in QUAD mode.
User Action: Use an integer in the valid range for specified data type.

INVCHASTR, Invalid character in string (ERR=287)
Explanation: The program attempts to output a string that contains an invalid character.
User Action: Remove the invalid character from the string.

INVFILOPT, Invalid file options (ERR=139)
Explanation: The program has specified invalid file options in the OPEN statement.
User Action: Change the invalid file options.

INVKEYREF, Invalid key of reference (ERR=144)
Explanation: The program attempts to perform a GET, FIND, or RESTORE on an INDEXED file using an invalid KEY, for example, an alternate KEY that does not exist for the file that was opened.
User Action: Use a valid KEY in the GET, FIND, or RESTORE statement.

INVRFAFIE, Invalid RFA field (ERR=173)
Explanation: During a FIND or GET by RFA, an invalid record's file address was specified.
User Action: Supply a correct RFA field.

IO_CHAALR, I/O channel already open (ERR=7)
Explanation: The program attempted to open a channel in a def or function while I/O was pending on that channel.
User Action: Change the function so that it does not open the channel.

IO_CHANOT, I/O channel not open (ERR=9)
Explanation: The program attempted to perform an I/O operation before opening the channel.
User Action: Open the channel before attempting an I/O operation to it.

KEYFIEBEY, Key field beyond end of record (ERR=151)
Explanation: The position given for the key field exceeds the maximum size of the record.
User Action: Specify a key field within the record.

KEYLARTHA, Key larger than record (ERR=159)
Explanation: The key specification exceeds the maximum record size.
User Action: Reduce the size of the key specification.

KEYNOTCHA, Key not changeable (ERR=130)
Explanation: An UPDATE statement attempted to change a key field that did not have CHANGES specified in the OPEN statement.
User Action: Remove the changed key field in the UPDATE statement or specify CHANGES for that key field in the OPEN statement. Note that the primary key cannot be changed and that you cannot specify CHANGES when you open an existing file if the OPEN statement that created the file did not specify CHANGES.

KEYSIZTOO, Key size too large (ERR=145)
Explanation: The key length on a GET or FIND is either zero or larger than the key length defined for the target record.
User Action: Change the key specification in the GET or FIND statement.

KEYWAIEXH, Keyboard wait exhausted (ERR=15)
Explanation: No input was received during the execution of an INPUT, LINPUT, or INPUT LINE statement that was preceded by a WAIT statement or INKEY$ timeout value.
User Action: None; you must supply input within the specified time.

LINTOOLON, Line too long (ERR=47)
Explanation: The program attempted to input more data than the input buffer can hold. The default input buffer size for terminal input is 132.
User Action: Either decrease the amount of data entered at one time, or increase the size of the input buffer. You can explicitly OPEN the input device and specify the input buffer size with the RECORDSIZE or MAP clause.

MATDIMERR, Matrix dimension error (ERR=124)
Explanation: The program attempts to:


Previous Next Contents Index