MUMPS IO Documentation
Copyright (c) 1999, 2000, 2001, 2002, 2003
Raymond Douglas Newman. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of Raymond Douglas Newman nor the names of the
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
Introduction
MUMPS IO may be performed to the following classes:
Devices
Files
Network
Pipes
The MUMPS commands that are used to do IO are:
OPEN
USE
WRITE
READ
CLOSE
How to use these commands with each class is discussed below.
The Device class includes such things as the console, serial lines (terminals
or printers), parallel ports (printers) and pseudo terminals (xterms).
Standard in (stdin) or MUMPS channel 0 (zero) is usually of class Device.
OPEN for Devices
NOTE: OPEN may not be used with MUMPS channel 0.
The OPEN command is of the form:
OPEN channel:(device:mode)[:timeout[:namespace]]
where:
channel is the MUMPS channel number from 1 to 15 inclusive.
device is the full device specification - like /dev/cuaa0.
mode is one of:
IO - open the device for both Reading and Writing
READ - open the device for Reading only
WRITE - open the device for Writing only
timeout is the optional time in seconds to wait for the device.
namespace is optional and must be the name of a routine that performs
any required control sequences. For example see %X364 from the
distribution.
For example: OPEN 1:("/dev/lpt0":"W") ;Open the printer for writing
USE for Devices
The USE command is of the form:
USE channel[:parameters[:namespace]]
where:
channel is the MUMPS channel number from 1 to 15 inclusive.
parameters are zero or more of the following. If more than one
parameter is supplied, they must be enclosed in parenthesis ()
and separated with colons.
TERMINATOR=$C(n,...) Specify the input terminators. All input terminators
must be in the range of ASCII 0 to ACSII 31. The special case of $C(13,10)
requires both characters to be in the input stream to terminate input.
The terminating character(s) is/are returned in the special variable $KEY.
The default input terminator for this class is $C(13).
OUTPUT=$C(n,...) Specify the output terminators to output when WRITE ! is
executed. This may be up to 6 (six) characters.
The default output terminators for this class are $C(13,10).
[NO]CONTROLC Enable/Disable interuption of a running process.
NOTE: This applies to stdin only and defaults to CONTROLC.
[NO]CONTROLT Enable/Disable mimi process status.
NOTE: This applies to stdin only and defaults to CONTROLT.
[NO]ESCAPE Enable/Disable escape sequence processing. When enabled,
escape sequences are returned in the variable $KEY.
The default for this class is ESCAPE.
[NO]ECHO Enable/Disable character echo.
The default for this class is ECHO.
DELETE= Define the character delete key as NONE, BACK $C(8), DELETE
$C(127) or BOTH $C(8) and $C(127).
The default for this class is DELETE=DELETE.
namespace is optional and must be the name of a routine that performs
any required control sequences. For example see %X364 from the
distribution.
WRITE for Devices
The WRITE command is of the form:
WRITE comma separated list of writearguments
where writearguments are:
# output terminator, page feed combination
! carrige return, linefeed combination or specified out terminator
?n tab to character position n (leftmost posn is 0)
/cmd[(params)] to provide device specific control (see namespace)
expression - output any valid MUMPS expression
*intexpr - output the ASCII character intexpr#256
READ for Devices
The READ command is of the form:
READ comma separated list of readarguments
where readarguments are:
# output terminator, page feed combination
! output carrige return, linefeed combination or specified out terminator
?n tab to character position n (leftmost posn is 0)
/cmd[(params)] to provide device specific control (see namespace)
variable[#count][:timeout] - input data to a maximum length of [#count]
into a MUMPS variable.
*variable[:timeout] - input one ASCII character as an integer (0 to 255)
If :timeout is specified and is zero or a positive number, the system will
wait that many seconds for data to become available. Should the read be
a *variable and a single character is received or should the [#count] be
reached or a terminator be received, then $TEST is set to 1. Else $TEST
is set to zero.
If the form READ "literal",VAR is used, all typeahead is canceled before
the read is done.
CLOSE for Devices
The CLOSE command is of the form:
CLOSE channel
Note: Closing channel 0 is ignored.
The File class includes text files (binary or ASCII).
Standard in (stdin) or MUMPS channel 0 (zero) can be of class File.
OPEN for Files
NOTE: OPEN may not be used with MUMPS channel 0.
The OPEN command is of the form:
OPEN channel:(file:mode)[:timeout[:namespace]]
where:
channel is the MUMPS channel number from 1 to 15 inclusive.
file is the full file specification - like /home/me/myfile.
mode is one of:
APPEND - open the file for Writing and append to the end of the file
READ - open the file for Reading only
WRITE - open the file for Writing only and delete the current file
timeout doesn't do anything for a file
namespace is optional and must be the name of a routine that performs
any required control sequences. For example see %X364 from the
distribution.
For example: OPEN 1:("/home/me/myfile":"W") ;Open myfile for writing
USE for Files
The USE command is of the form:
USE channel[:parameters[:namespace]]
where:
channel is the MUMPS channel number from 1 to 15 inclusive.
parameters are zero or more of the following. If more than one
parameter is supplied, they must be enclosed in parenthesis ()
and separated with colons.
TERMINATOR=$C(n,...) Specify the input terminators. All input terminators
must be in the range of ASCII 0 to ACSII 31. The special case of $C(13,10)
requires both characters to be in the input stream to terminate input.
This is typically used for reading files created on DOS.
The terminating character(s) is/are returned in the special variable $KEY.
The default input terminator for this class is $C(10).
OUTPUT=$C(n,...) Specify the output terminators to output when WRITE ! is
executed. This may be up to 6 (six) characters.
The default output terminator for this class is $C(10).
namespace is optional and must be the name of a routine that performs
any required control sequences. For example see %X364 from the
distribution.
WRITE for Files
The WRITE command is of the form:
WRITE comma separated list of writearguments
where writearguments are:
# output terminator, page feed combination
! carrige return, linefeed combination or specified out terminator
?n tab to character position n (leftmost posn is 0)
/cmd[(params)] to provide device specific control (see namespace)
expression - output any valid MUMPS expression
*intexpr - output the ASCII character intexpr#256
READ for Files
The READ command is of the form:
READ comma separated list of readarguments
where readarguments are:
# output terminator, page feed combination
! output carrige return, linefeed combination or specified out terminator
?n tab to character position n (leftmost posn is 0)
/cmd[(params)] to provide device specific control (see namespace)
variable[#count] - input data to a maximum length of [#count]
into a MUMPS variable.
*variable - input one ASCII character as an integer (0 to 255)
CLOSE for Files
The CLOSE command is of the form:
CLOSE channel
Note: Closing channel 0 is ignored.
A file may be deleted by opening it for WRITE then closing it.
For example:
OPEN 1:("file":"W") ;Open file to be deleted
CLOSE 1 ;Delete it
The Network class includes tcp socket connections (Server or Client).
Standard in (stdin) or MUMPS channel 0 (zero) can be of class Network.
OPEN for Network
NOTE: OPEN may not be used with MUMPS channel 0.
The OPEN command is of the form:
OPEN channel:(port/address:mode)[:timeout[:namespace]]
where:
channel is the MUMPS channel number from 1 to 15 inclusive.
port/address is the port to be opened (Server) or the ip address space
port (Client).
mode is one of:
TCPIP - open the specified ip address/port combination (Client connection)
SERVER[=n] - open the specified port in Server mode. When =n is specified
fork each connection up to a maximum of n simultaneous jobs.
timeout specifies the time to wait for the connection to become available
(Client) or to wait for a client to connect (Server).
An error will occur when a non-existant address is assessed after a
specific time. Both the error and the time are O/S specific as follows:
linux FreeBSD
Timeout (secs) 3 60
Error Z313 Z260
namespace is optional and must be the name of a routine that performs
any required control sequences. For example see %X364 from the
distribution.
For example: OPEN 1:("80":"S=5") ;Open http port as server
USE for Network
The USE command is of the form:
USE channel[:parameters[:namespace]]
where:
channel is the MUMPS channel number from 1 to 15 inclusive.
parameters are zero or more of the following. If more than one
parameter is supplied, they must be enclosed in parenthesis ()
and separated with colons.
TERMINATOR=$C(n,...) Specify the input terminators. All input terminators
must be in the range of ASCII 0 to ACSII 31. The special case of $C(13,10)
requires both characters to be in the input stream to terminate input.
This is typically used for reading files created on DOS.
The terminating character(s) is/are returned in the special variable $KEY.
The default input terminator for this class is $C(13).
OUTPUT=$C(n,...) Specify the output terminators to output when WRITE ! is
executed. This may be up to 6 (six) characters.
The default output terminator for this class is $C(13).
namespace is optional and must be the name of a routine that performs
any required control sequences. For example see %X364 from the
distribution.
WRITE for Network
The WRITE command is of the form:
WRITE comma separated list of writearguments
where writearguments are:
# output terminator, page feed combination
! carrige return, linefeed combination or specified out terminator
?n tab to character position n (leftmost posn is 0)
/cmd[(params)] to provide device specific control (see namespace)
expression - output any valid MUMPS expression
*intexpr - output the ASCII character intexpr#256
READ for Network
The READ command is of the form:
READ comma separated list of readarguments
where readarguments are:
# output terminator, page feed combination
! output carrige return, linefeed combination or specified out terminator
?n tab to character position n (leftmost posn is 0)
/cmd[(params)] to provide device specific control (see namespace)
variable[#count] - input data to a maximum length of [#count]
into a MUMPS variable.
*variable - input one ASCII character as an integer (0 to 255)
CLOSE for Network
The CLOSE command is of the form:
CLOSE channel
Note: Closing channel 0 is ignored.
The Pipes class includes named unix pipes
OPEN for Pipes
The OPEN command is of the form:
OPEN channel:(pipe:mode)[:timeout[:namespace]]
where:
channel is the MUMPS channel number from 1 to 15 inclusive.
pipe is the full pipe specification - like /home/me/mypipe.
mode is one of:
NEWPIPE - open a new named pipe for reading.
PIPE - open an existing named pipe for writing.
timeout doesn't do anything for a pipe
namespace is optional and must be the name of a routine that performs
any required control sequences. For example see %X364 from the
distribution.
For example: OPEN 1:("/home/me/mypipe":"N") ;Open mypipe for reading
USE for Pipes
The USE command is of the form:
USE channel[:parameters[:namespace]]
where:
channel is the MUMPS channel number from 1 to 15 inclusive.
parameters are zero or more of the following. If more than one
parameter is supplied, they must be enclosed in parenthesis ()
and separated with colons.
TERMINATOR=$C(n,...) Specify the input terminators. All input terminators
must be in the range of ASCII 0 to ACSII 31. The special case of $C(13,10)
requires both characters to be in the input stream to terminate input.
This is typically used for reading files created on DOS.
The terminating character(s) is/are returned in the special variable $KEY.
The default input terminator for this class is $C(13,10).
OUTPUT=$C(n,...) Specify the output terminators to output when WRITE ! is
executed. This may be up to 6 (six) characters.
The default output terminator for this class is $C(13,10).
namespace is optional and must be the name of a routine that performs
any required control sequences. For example see %X364 from the
distribution.
WRITE for Pipes
The WRITE command is of the form:
WRITE comma separated list of writearguments
where writearguments are:
# output terminator, page feed combination
! carrige return, linefeed combination or specified out terminator
?n tab to character position n (leftmost posn is 0)
/cmd[(params)] to provide device specific control (see namespace)
expression - output any valid MUMPS expression
*intexpr - output the ASCII character intexpr#256
READ for Pipes
The READ command is of the form:
READ comma separated list of readarguments
where readarguments are:
# output terminator, page feed combination
! output carrige return, linefeed combination or specified out terminator
?n tab to character position n (leftmost posn is 0)
/cmd[(params)] to provide device specific control (see namespace)
variable[#count] - input data to a maximum length of [#count]
into a MUMPS variable.
*variable - input one ASCII character as an integer (0 to 255)
CLOSE for Pipes
The CLOSE command is of the form:
CLOSE channel