version 1.1, 2025/05/02 15:19:32
|
version 1.2, 2025/05/02 16:25:46
|
Line 20
|
Line 20
|
.\" along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
.\" along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
.\" |
.\" |
.\" $Log$ |
.\" $Log$ |
|
.\" Revision 1.2 2025/05/02 16:25:46 snw |
|
.\" -m |
|
.\" |
.\" Revision 1.1 2025/05/02 15:19:32 snw |
.\" Revision 1.1 2025/05/02 15:19:32 snw |
.\" Add conformance clause man page |
.\" Add conformance clause man page |
.\" |
.\" |
.\" |
.\" |
|
.TH freem_conformance 1 "2 May 2025" FreeM "FreeM User Manual" |
|
.SH NAME |
|
|
|
freem_conformance - FreeM MDC Conformance Document |
|
|
|
.SH SYNOPSIS |
|
|
|
FreeM version 0.64.0-rc1 conforms to X11.1-1995, as modified by the following MDC documents: |
|
|
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
X11/1998-28 Event Processing (MDC status A) |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
X11/1998-31 IF THEN & ELSE (MDC status A) |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
X11/95-118 Undefined ssvns (MDC status A) |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
X11/96-13 Portable length limit of names (MDC status A) |
|
.RE |
|
|
|
with the following exceptions: |
|
.SH EXCEPTIONS |
|
|
|
.TP |
|
Aliases |
|
.RS 4 |
|
FreeM supports aliases for local variables that can reference either the root node or a subtree: |
|
|
|
.EX |
|
USER> S X(3)="harps" |
|
|
|
USER> S J=.X(3) |
|
|
|
USER> S J(8)=17 |
|
|
|
USER> ZWR X |
|
X(3)=harps |
|
X(3,8)=17 |
|
.EE |
|
|
|
Aliases used in pass-by-reference can also reference entire subtrees instead of just the root node: |
|
|
|
.EX |
|
USER> ZL TEST |
|
|
|
USER> ZP |
|
|
|
TEST ; |
|
S X(3)=4 |
|
D SUBR(.X(3)) |
|
ZWR X |
|
QUIT |
|
; |
|
SUBR(A) ; |
|
S A(4)="thwack!" |
|
QUIT |
|
|
|
USER> D ^TEST |
|
X(3)=4 |
|
X(3,4)=thwack! |
|
.EE |
|
.RE |
|
|
|
.TP |
|
Environments |
|
.RS 4 |
|
In FreeM, the \fInamespace\fR is roughly equivalent to what the \fIStandard\fR refers to as an \fIenvironment\fR. However, FreeM uses the term \fIenvironment\fR to refer to a collection of namespaces, processes, and an after-image journal. |
|
.RE |
|
.TP |
|
Indirection |
|
.RS 4 |
|
FreeM supports several forms of indirection that are nonstandard, as well as allowing indirection in several constructs where the standard prohibits it. Below is a list of some known instances of idiosyncratic indirection; please note that this list is by no means comprehensive: |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
FOR loops in FreeM support argument indirection |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
FreeM supports list indirection, such as \fBS X="1,2,3",ARGS="X,"","",2" W $P(@ARGS)\fR, which will output \fB2\fR |
|
.RE |
|
.RE |
|
.TP |
|
\fBMERGE\fR |
|
.RS 4 |
|
\fBMERGE\fR should be implemented as \fB[MERGE] postcond SP L mergeargument\fR, but is currently implemented as \fBM[ERGE] postcond SP mergeargument\fR. |
|
.RE |
|
.TP |
|
\fBKVALUE\fR and \fBKSUBSCRIPTS\fR |
|
.RS 4 |
|
Only the inclusive forms of these commands are currently implemented. |
|
.RE |
|
.TP |
|
Transaction Processing |
|
.RS 4 |
|
Restartable transactions are not implemented. |
|
.RE |
|
.TP |
|
Event Processing |
|
.RS 4 |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBETRIGGER\fR is not implemented |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
Of the event classes defined in \fIX11/1998-28\fR, only the \fBINTERRUPT\fR \fIevclass\fR is implemented |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
The \fBTRIGGER\fR \fIevclass\fR is nonstandard |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
The \fB^$EVENT\fR \fIssvn\fR is incomplete |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
Environment-wide events defined in \fB^$SYSTEM\fR are nonstandard |
|
.RE |
|
.RE |
|
.TP |
|
\fBDO\fR and \fBGOTO\fR |
|
.RS 4 |
|
FreeM's implementation of these commands allows the \fIentryref\fR to consist only of the \fI+ intexpr\fR component, in which \fIintexpr\fR is interpreted as a number of lines from the beginning of the currently-executing routine. |
|
.RE |
|
.TP |
|
\fBIF\fR and \fBELSE\fR |
|
.RS 4 |
|
Both of these commands allow a \fIpostcondition\fR in FreeM. |
|
.RE |
|
|
|
\fBLOCK\fR |
|
.RS 4 |
|
The first subscript of \fB^$LOCK\fR collates according to the rules for global and local subscripts, not as an \fInref\fR, as FreeM uses globals (both persistent and memory-backed) as backing store for SSVNs. |
|
.RE |
|
.TP |
|
Miscellaneous Language Features |
|
.RS 4 |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fB$DIALECT\fR intrinsic special variable |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBASSERT\fR command |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBCONST\fR command |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBMAP\fR command |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBTHROW\fB command |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBUSING\fR command |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBWATCH\fR command |
|
.RE |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBWITH\fR command |
|
.RE |
|
.RE |
|
|
|
.SH SUPPORTED CHARACTER SET PROFILES |
|
.RS 4 |
|
Supported character set profiles are: |
|
.sp |
|
.RS 4 |
|
.ie n \{\ |
|
\h'-04'\(bu\h'+03'\c |
|
.\} |
|
.el \{\ |
|
.sp -1 |
|
.IP \(bu 2.3 |
|
.\} |
|
\fBM\fR |
|
.RE |
|
.RE |
|
|
|
.SH $SYSTEM |
|
Uniqueness of \fB$SYSTEM\fR is guaranteed by combining the FreeM vendor ID (49) with the short form of the system hostname and a \fIUUIDv4\fR identifier, generated for each FreeM environment when it is initially configured. |
|
|
|
\fB$SYSTEM\fR looks like this: |
|
|
|
.EX |
|
49,"hesperos:931fac9d-b2b3-4e86-adb5-6c248b87d6ae" |
|
.EE |
|
.SH DISABLING NONSTANDARD FEATURES |
|
Standards conformance may be imrpoved somewhat in certain contexts by setting the \fB$DIALECT\fR intrinsic special variable to \fBM77\fR, \fBM84\fR, \fBM90\fR, \fBM95\fR, \fBMDS\fR, or \fBM5\fR. |
|
|
|
See \fIThe FreeM Manual\fR (\fBinfo freem\fR) for further information. |
|
.SH AUTHOR |
|
Written by Serena Willis (snw@coherent-logic.com) |
|
|
|
.SH COPYRIGHT |
|
Copyright (C) 2025 Coherent Logic Development LLC |
|
|
|
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover texts, and with no Back-Cover Texts. |
|
|
|
.SH "SEE ALSO" |
|
.PP |
|
\fBfreem\fR(1), |
|
\fBfmadm\fR(8), |
|
\fBfreem.conf\fR(5), |
|
\fBenv.conf\fR(5) |
|
|