--- freem/doc/freem_conformance.1 2025/05/02 15:19:32 1.1 +++ freem/doc/freem_conformance.1 2025/05/17 19:35:30 1.9 @@ -1,5 +1,5 @@ .\" -.\" $Id: freem_conformance.1,v 1.1 2025/05/02 15:19:32 snw Exp $ +.\" $Id: freem_conformance.1,v 1.9 2025/05/17 19:35:30 snw Exp $ .\" .\" Author: Serena Willis .\" Copyright (C) 2025 Coherent Logic Development LLC @@ -20,7 +20,320 @@ .\" along with FreeM. If not, see . .\" .\" $Log: freem_conformance.1,v $ +.\" Revision 1.9 2025/05/17 19:35:30 snw +.\" Add remove_freem.sh script +.\" +.\" Revision 1.8 2025/05/16 13:22:58 snw +.\" Bump version to account for shared memory changes +.\" +.\" Revision 1.7 2025/05/08 12:52:53 snw +.\" Begin development on 0.65.0 +.\" +.\" Revision 1.6 2025/05/07 19:03:06 snw +.\" Release 0.65.1-rc0, prepare to begin shared memory rewrite +.\" +.\" Revision 1.5 2025/05/05 23:18:29 snw +.\" Update conformance document to cover the idiotic numeric coercion rules around E notation +.\" +.\" Revision 1.4 2025/05/05 04:48:17 snw +.\" Update conformance document +.\" +.\" Revision 1.3 2025/05/03 03:07:55 snw +.\" Documentation updates +.\" +.\" Revision 1.2 2025/05/02 16:25:46 snw +.\" -m +.\" .\" Revision 1.1 2025/05/02 15:19:32 snw .\" 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.65.1-rc0 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. This behavior is in addition to--and not instead of--the \fIentryref\fR syntax specified in the \fIStandard\fR. +.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 +.\} +Multiple consecutive pluses or minuses after the E in E notation are allowed. The fact that they are illegal in numlits but string coercion is expected to ignore the signs makes it impossible to fix. +.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) +