Below is a list of all changes that were approved by the “old” M[UMPS]
Development Committee, before they went “dormant”.
A document that incorporates the 1995 standard, as well as all these changes
can be accessed here. (Note: the first 50 or so pages are
notes from the document editor about how changes were incorporated and “gaps”
that still have to be filled.)
Whether or not any of these changes will ever be incoporated in an updated standard
will be up to any group that takes up this effort in the future.
Proposed changes to the 1995 M[UMPS] Language Standard
- Clarifications and corrections
- Promised extensions
- Portability Extensions
- Other Enhancements
A. Clarifications and Corrections
- X11/1994-5: Initializing intrinsic variables
Initializing intrinsic variables.
$D[EVICE] starts out as the empty string
$K[EY] starts out as the empty string
$I[O] starts out as the same value as $PRINCIPAL
$T[EST] starts out as 0 (false)
$X and $Y start out as empty if $I[O] is empty, or else
as a device-dependent value
- X11/1994-14: Multiple patatoms within alternation
Correction of omission in original definition of alternation.
An alternation is a pattern match specification that allows for
multiple possible matches: X?1(2A,3N1P3N)
- X11/1994-46: ^$GLOBAL definition correction>
Original definition allowed ^$G[LOBAL]("^ABC(1,2,3)",...).
New definition only allows ^$G[LOBAL]("^ABC",...) (unsubscripted form).
- X11/1995-18: ID # 43: term global variable name
Interpretation: The initial character ^ does not count toward
establishing the length of the name of a global variable.
- X11/1995-19: ID # 44: leading zero, 2 parameter $FNUMBER
Interpretation: In the 2 parameter form of $FN[UMBER], result
values for input-values between -1 and +1 will not have a
zero preceeding the decimal point.
- X11/1995-20: ID # 45: sign of zero
Interpretation: The value zero is neither positive nor negative.
As a result, the function $FN[UMBER] will never show a sign for
values resulting from an input-value equal to zero.
- X11/1995-21: SET command clarification
Interpretation: Although the standard does not state this
explicitly, the effect on the naked reference in the case of a
SET $E[XTRACT](...)=value is similar to the effect of a
SET $P[IECE](...)=value.
- X11/1995-31: KILL indirection
Additional possibility in indirection in the context of the
K[ILL] command. It is now possible to K[ILL] (@A) with A equal to
"@B" and B equal to "X", resulting in the equivalent of K[ILL] (X).
- X11/1995-91: $ORDER definition
Re-wording of the specification of the function $O[RDER].
- X11/1995-94: Parameter passing clarification
Interpretation: When a local variable is declared NEW inside
a subroutine, and the calling routine did not define a value
for that variable, the variable will again be "undefined"
after the Q[UIT] command is executed that terminates execution
of the D[O] level where the N[EW] command occurred.
- X11/1995-132: Parameter passing to a routine>
Re-specification that DO ^ROUTINE(param1,...) starts execution
at the first line of a routine. If that line does not have a
label with a formal parameter list, the error code will be
M20.
- X11/1995-136: String length clarification (Interpretation)
Interpretation: The error "maximum string length exceeded" will
occur when an application attempts to create a string longer
that the maximum length limit for the implementation being
used. This maximum length limit may be larger than the 255
characters specified in the portability requirements.
- X11/1995-137: Interpretation of “backward compatible” and “reserved”
Interpretation: Definition of the terms “backward compatible”
and “reserved”.
- X11/1996-7: Lower case characters in names
Allow the use of lower case characters in names.
- X11/1996-11: fncode correction
Correction to the definition of $FN[UMBER]: only defined
values for fncode are allowed. All other values are “reserved”.
- X11/1996-32: Sign of zero in $FNUMBER
Definition that, in the context of $FN[UMBER], the value zero
does not have a sign.
- X11/1996-34: Modulo by zero
Definition of the error code for modulo by zero: M9.
- X11/1996-35: Parameter passing cleanup
Clarification of the text about parameter passing.
More explanation, tighter metalanguage.
- X11/1996-43: ssvn formalization
Formalization of the specification of ssvns.
- X11/1996-45: charset names
Formalism for the specification of names for character set
profiles.
- X11/1996-49: QUIT with argument in FOR
Definition of the error that occurs when a Q[UIT] command with
an argument is encountered within the code following F[OR] command:
M16.
- X11/1996-57: GOTO rewording
Rewording of the definition of the G[OTO] command.
- X11/1996-58: Add JOB to routine execution
Inclusion of the J[OB] command in the text about routine execution.
- X11/1996-65: Normalize TSTART definition
Rewording of the definition of the TSTART metalanguage.
- X11/1996-67: Leading zero in $FNUMBER function
Definition that values between -1 and +1, in the context of
$FN[UMBER] with 2 parameters, will return no leading zero.
- X11/1996-68: Negative Subscripts in namevalue
Rewording of part of the definition of namevalue, to
clarify the possibility of negative values in subscripts.
- X11/1997-10: mnemonicspec cleanup
Clarification: it is an error (M35) to specify on an O[PEN] command
a mnemonicspace that the device does not support.
It is an error (M36) to specify incompatible mnemonicspaces on an
O[PEN] command.
- X11/1997-25: First Line Format
Recommended format for first line of a routine is removed from standard.
- X11/1998-5: Fix algoref
Correction: the metalanguage for algoref allowed for the possibility
that a name be spelled as $&&entry^entity. The possibility for the
second & is removed.
- X11/1998-23, OPEN Command Clarification (Re-Open)
Clarification: when an O[PEN] command is issued for a device that is
already OPEN for a process with parameters that are different from
the ones that are currently active, the system will behave
“as is an intervening C[LOSE] command had been issued”.
- X11/1998-24, Duplicate Keywords Clarified
Clarification: When multiple instances of keywords occur in O[PEN],
C[LOSE] or U[SE] commands, the latest one processed (right-most
one) wins.
- X11/1998-25, Device Parameter Issues
There is an issue with parsing keywords in device parameters.
While the current definition is not ambiguous, it is hard to implement.
Implementors may require that names of keywords are always prefixed
with a "/".
- X11/1998-26, Canonic form of ssvn names
Interpretation: The canonic form of ssvns is fully spelled
and upper case only.
- X11/SC12/1993-33: Effect of CLOSE $IO
Definition that the effect of CLOSE $I[O] will be that $I[O] becomes
the empty string.
- X11/SC13/1997-9: Mathematics Errors
Additional error codes:
Mathematic underflow is no error (result is 0)
Mathematic overflow: M92
0**(negative number): M9
0**0: M94
Exponentiation where the result is a complex number
(non-zero imaginary part): M95
- X11/SC13/1998-13, Define variable m in $PIECE
Clarification of definition of $P[IECE] (value of helper variable m)
- X11/SC13/TG15/1997-3, Local Variable Storage
Removal of portability limit for Local Variable Storage
- X11/SC15/1998-5, Error Handling Corrections
Various corrections to the specification of Error Handling
- X11/TG17/1995-5 $FNUMBER interpretation
Interpretation: if the fncode in a reference to $FN[UMBER]
is equal to the empty string, the function performs no editing.
B. Promised extensions
C. Portability Extensions
- X11/1994-28: Portable string length
Extension of Portable string length to 510 characters.
Portable length for subscripts remains at 255 characters.
- X11/1996-13: Portable length limit of names
Extension of the specification for the portable length limit of names.
Names may now be up to 31 characters. If longer names are used,
an error will occur with error code M56.
- X11/1997-23: Portable length limit of strings
Increase portability limit for string length.
Intermediate values may be up to 32,767 characters.
Values in local variables may be up to 32,767 characters.
Values in ssvns may be up to 32,767 characters.
Values in global variables remain restricted to 510 characters
Lengths of subscripts are no longer restricted to any particular
length (total length of name may not exceed string length)
D. Other Enhancements
- X11/1994-4: Two character operators
Two character operators.
Introduction of <= (less than or equal) and >= (greater than
or equal). Also allows '<= and '>=
- X11/1994-23: Library proposal
Library proposal. This proposal defines the frame-work
for the M[UMPS] library document.
- X11/1994-24: Structured Systems Variables Structure
The structure of Structured System Variables.
This document provides guidance to future document authors
for the structure to be used when defining new ssvns.
- X11/1994-47: NEW $TEST
Make it possible to specify $T[EST] in a N[EW] command, so that
argumented DO commands can stack the value of $T[EST] in an application
defined fashion.
- X11/1995-2: Execution environment
Allow the specification of an environment on the J[OB] command.
- X11/1995-11: Math library functions, general>
Definition of library functions ABS, DECDMS, DEGRAD, DMSDEC,
E, EXP, LOG, LOG10, PI, RADDEG, SIGN and SQRT.
- X11/1995-12: Math library functions, trigonometry
Definition of library functions SIN, COS, TAN, COT, SEC, CSC,
ARCSIN, ARCCOS, ARCTAN, ARCCOT, ARCSEC and ARCCSC.
- X11/1995-13: Math library functions, hyperbolic trigonometry
Definition of library functions SINH, COSH, TANH, COTH,
ARCSINH, ARCCOSH, ARCTANH and ARCCOTH.
- X11/1995-14: Math library functions, complex
Definition of library functions CABS, CADD, CCOS, CDIV, CEXP,
CLOG, CMUL, COMPLEX, CONJUG, CPOWER, CSIN and CSUB.
- X11/1995-22: Meaning of term “standard” in library
Definition of the meaning of the term “standard” in the
context of library documents.
- X11/1995-63: Naming string length error
Define the error code for "exceeding maximum string length" as M75.
- X11/1995-93: OMI WRITE
Specification of the OMI protocols related to the W[RITE]
command, when writing to a device across a network.
- X11/1995-95: Portable controlmnemonics and mnemonicspaces
Definition of a mechanism for Portable controlmnemonics and
mnemonicspaces. Allows for users and implementors to define
their own mnemonicspaces and controlmnemonics.
- X11/1995-96: Spaces at end-of-line
Allow for the occurence of spaces at end-of-line.
- X11/1995-111: PRODUCE library function
Definition of the library function PRODUCE.
- X11/1995-112: REPLACE library function
Definition of the library function REPLACE.
- X11/1995-116: ^$JOB Device information
Definition of the information about devices in ^$J[OB]($J[OB],"OPEN",...),
^$J[OB]($J[OB],"$PRINCIPAL") and ^$J[OB]($J[OB],"$IO").
- X11/1995-117: ssvn collation
Specification of the defaults for the collation of ssvns.
- X11/1995-118: Undefined ssvns
The error code for a reference to an undefined ssvn is M60.
- X11/1995-119: Extended extids
Extension of the definition for embedded programs:
- extids (names of external processors) are case insentitive
- initial character Z allows implementation specific extensions
- allow for empty parameter list
- X11/1996-9: pattern negation
Make it possible to scan a string for matching anything, except
for a specific pattern: X?1"Y".'"Y"1"Y" (a string that starts
with 1 "Y", then (optionally) has other characters that are not
equal to "Y", and ends with 1 "Y".
- X11/1996-10: Reverse $QUERY
Definition of Reverse $Q[UERY]: SET X=$Q[UERY](variable,-1).
- X11/1996-26: Library function matrix math
Definition of library functions MTXADD, MTXCOF, MTXCOPY, MTXDET,
MTXEQU, MTXINV, MTXMUL, MTXSCA, MTXSUB, MTXTRP and MTXUNIT.
- X11/1996-27: XOR operator
Definition of the XOR operator (!!).
- X11/1996-30: OMI JOB
Specification of the OMI protocols related to the J[OB]
command, when starting a job across a network.
- X11/1996-31: OMI multiple transaction
Optimization of the OMI protocols in general.
Definition of a protocol that allows for the specification of multiple
transactions in a single message.
- X11/1996-41: String and M[UMPS] Collation
String and M[UMPS] Collation. Definition of methods of
specification of collation algorithms.
- X11/1996-42: charset ISO 8859-1 USA
Definition of the character set profile for ISO 8859-1 USA.
- X11/1996-44: Improve mnemonicspace handling
Definition of the ssvns ^$D[EVICE](device,"MNEMONICSPACE")
and ^$D[EVICE](device,"MNEMONICSPEC").
- X11/1996-51: Device environment
Definition of the meaning of an environment specification
in the context of the reference to a device.
- X11/1996-52: ROUTINE management
Definition of RS[AVE] and RL[OAD] commands (creation and editing
of routines).
- X11/1996-69: OMI Extended $G[ET] and $O[RDER]
Specification of the OMI protocols related to the extended forms
of the $G[ET] and $O[RDER] functions.
- X11/1996-70: OMI International
Additions to OMI protocols related to the impact of
internationalization.
- X11/1996-74: Operator Overrides
Specification of override mechanisms in order to be able
to compare strings in different character sets.
- X11/1997-3: pattern Ranges
Definition of the notation of “Ranges” in pattern specifications.
X?.["A"-"F"]N (letter A, B, C, D, E or F, or a numeric, or: a
hexadecimal number)
- X11/1997-22: Set $QS[UBSCRIPT] pseudo function
Allow subscripts in a namevalue to be replaced using the S[ET] command.
- X11/1997-26: Metric Units Policy Statement
Whenever applicable, the MDC will use metric units.
- X11/1998-8, ssvn for User/Group ID
Introduction of “write-once” ssvns ^$J[OB]($J[OB],"USER") and
^$J[OB]($J[OB],"GROUP")
- X11/1998-14, Sockets Binding>
Introduction of formalized communication through TCP/IP sockets.
(Server part as well as client part.)
- X11/1998-19, User Defined ssvns
Introduction of formalism for user-defined ssvns.
Names of user-defined ssvns start with ^$Y...
- X11/1998-21, Miscellaneous Character Functions
Introduction of library functions UPPER, LOWER and PATCODE.
These functions are character-set specific.
- X11/1998-22, OMI Version 2 (rationale)
OMI Version 2
- X11/1998-27, Pattern Match String Extraction
Introduction of a formalism that allows for extracting a substring
from a string that matches a specific part of a pattern.
- X11/1998-28, Event Processing
Event Processing (both synchronous and asynchronous).
- X11/1998-29, Local variables in ^$JOB
Introduction of ^$J[OB]($J[OB],"VAR").
- X11/1998-30, New $REFERENCE
Make it possible to N[EW] $R[EFERENCE]
- X11/1998-31, If, Then and Else
Introduction of T[HEN] command (restores value of $T[EST] at end
of line)
- X11/1998-32, Cyclic Redundancy Code Functions
Introduction of library functions CRC16, CRC32 and CRCCCITT
(Cyclic Reduncancy Checks)
- X11/SC11/TG4/WG6/1994-16: MWAPI version 1.1 (superseded)
MWAPI version 1.1 (superseded)
- X11/SC13/1994-33: KILL data and subscripts
Definition of the commands KV[ALUE] and KS[UBSCRIPTS].
KV[ALUE] kills the value and leaves descendants.
KS[UBSCRIPTS] kills the descendants and leaves the value.
- X11/SC12/1997-6: Output Time Out
Introduction of the ability to specify a time-out on output.
- X11/SC12/1998-11, Output Time Out Initialized
Clarification: initial values for Output Time Out parameters
- X11/SC12/1998-13, User-definable I/O Handling
Formalism for User-definable controlmnemonics
- X11/SC12/1998-14, Undefined devicekeyword
The error code for an undefined devicekeyword is M109
- X11/SC13/1998-10, FORMAT Library Function
Introduction of FORMAT Library Function
- X11/1999-4, Definition of reverse $QUERY
Rewording of definition of Reverse $Q[UERY]: SET X=$Q[UERY](variable,-1).
- X11/SC13/TG3/1998-4, Data Record Functions>
Data Record Functions: access multiple pieces (or multiple extracts)
from a string in a single reference.
- X11/SC13/TG6/1998-3, $HOROLOG system function>
Introduction of $H[OROLOG] function
$H[OROLOG](0) = date,time,offset
$H[OROLOG](1) = date,time,offset (local time)
$H[OROLOG](-1) = date,time (UCT)
(Local time + offset = UCT)
- X11/SC13/TG5/1996-5 Library Functions, editorial corrections>
55 editorial correction to the example code of several
library functions.
- X11/SC15/1997-42, Subscript Indirection and LOCK
Allow "Subscript Indirection" in argument of L[OCK] command
- X11/SC15/1998-8, $MUMPS function
Introduction of $M[UMPS] function (checks syntax of code passed
as parameter)
- X11/SC15/1998-11, Generic Indirection
Introduces Generic Indirection
- X11/1999-5, Object Usage
Introduces second data type for MUMPS: pointer to object.
Introduces function $TY[PE] and A[SSIGN] command.
A[SSIGN] assigns an OREF value to a variable
$TY[PE] returns "OBJECT" or "MVAL".