Each device type supported by GT.M responds to a particular subset of deviceparameters, while ignoring others. Devices may be programmed in a device-specific manner, or in a device-independent manner. Device-specific I/O routines are intended for use with only one type of device. Device-independent I/O routines contain appropriate deviceparameters for all devices to be supported by the function, so the user can redirect to a different device output while using the same program.
GT.M supports the following I/O device types:
Terminals and Printers
Sequential Disk Files
GT.M OPEN, USE, and CLOSE commands have an argument expression specifying a device name.
During an OPEN, GT.M attempts to resolve the specified device names to physical names. When GT.M successfully resolves a device name to a physical device, that device becomes the target of the OPEN. If the device name contains a dollar sign ($), GT.M attempts an environment variable translation; the result becomes the name of the device. If it does not find such an environment variable, it assumes that the dollar sign is a part of the filename, and opens a file by that name.
Note: GT.M resolves the device name argument for menemonicspace devices (SOCKET or PIPE) to a arbitrary handle instead of a physical name.
Once a device is OPEN, GT.M establishes an internal correspondence between a name and the device or file. Therefore, while the device is OPEN, changing the translation of an environment variable in the device specification does not change the device.
The following names identify the original $IO for the process:
GT.M uses standard filenames for device specifiers.
The complete format for a filename is:
If the expression specifying a device does not contain a complete filename, the expression may start with an environment variable that translates to one or more leading components of the filename. GT.M applies default values for the missing components.
If the specified file is not found, it is created unless READONLY is specified.
The GT.M filename defaults are the following:
Directory: Current working directory
File: No default (user-defined filename)
Filetype: No default (user-defined filetype)
I/O deviceparameters either perform actions that cause the device to do something (for example, CLEARSCREEN), or specify characteristics that modify the way the device subsequently behaves (for example, WIDTH). When an I/O command has multiple action deviceparameters, GT.M performs the actions in the order of the deviceparameters within the command argument. When a command has characteristic deviceparameters, the last occurrence of a repeated or conflicting deviceparameter determines the characteristic.
Deviceparameters often relate to a specific device type. GT.M ignores any deviceparameters that do not apply to the type of the device specified by the command argument. Specified device characteristics are in force for the duration of the GT.M image, or until modified by an OPEN, USE, or CLOSE command.
When reopening a device that it previously closed, a GT.M process restores all characteristics not specified on the OPEN to the values the device had when it was last CLOSEd. GT.M treats FIFO, PIPE, and SD differently and uses defaults for unspecified device characteristics on every OPEN (that is, GT.M does not retain devices characteristics on a CLOSE of SD, FIFO, and PIPE).
The ZSHOW command with an argument of "D" displays the current characteristics for all devices OPENed by the process. ZSHOW can direct its output into a GT.M variable. For more information on ZSHOW, refer to “ZSHow”.
Most Z* deviceparameters have the same functionality as their counterparts and are supported for compatibility reasons.
GT.M deviceparameters do not have predefined abbreviations. GT.M recognizes deviceparameters using a minimum recognizable prefix technique. Most deviceparameters may be represented by four leading characters, except ERASELINE, all deviceparameters starting with WRITE, and Z* deviceparameters in a mnemonicspace (such as SOCKET). The four leading characters recognized do not include a leading NO for negation.
For compatibility with previous versions, GT.M may recognize certain deviceparameters by abbreviations shorter than the minimum. While it is convenient in Direct Mode to use shorter abbreviations, FIS may add additional deviceparameters, and therefore, recommends all programs use at least four characters. Because GT.M compiles the code, spelling out deviceparameters completely has no performance penalty, except when used with indirection or XECUTEd arguments.
This chapter uses the following mnemonics to describe when a deviceparameter applies:
TRM: Valid for terminals
SD: Valid for sequential disk files
FIFO: Valid for FIFOs
NULL: Valid for null devices
SOC: Valid for both socket devices (TCP and LOCAL)
SOC(LOCAL): Valid for LOCAL sockets devices
SOC(TCP): Valid for TCP sockets devices
PIPE: Valid for PIPE devices
Lower case "pipe" refers to a UNIX pipe and the upper case "PIPE" to the GT.M device.
Some of the deviceparameter defaults shown are the basic operating system defaults, and may be subject to modification before the invocation of GT.M.
When a user may choose a device for I/O, GT.M routines can take one of two basic programming approaches.
The user selection directs the program into different code branches, each of which handles a different device type.
The user selection identifies the device. There is a single code path written with a full complement of deviceparameters to handle all selectable device types.
The latter approach is called device-independent programming. To permit device independent programming, GT.M uses the same deviceparameter for all devices that have an equivalent facility, and ignores deviceparameters applied to a device that does not support that facility.
This example OPENs a device with deviceparameters that affect different devices. The EXCEPTION has an effect for all device types. When dev is a terminal or a null device, GT.M ignores the other deviceparameters. When dev is a sequential file on disk, GT.M uses REWIND and VARIABLE. This command performs a valid OPEN for all the different device types.