Annotation of freem/doc/freem_conformance.1, revision 1.6
1.1 snw 1: .\"
1.6 ! snw 2: .\" $Id: freem_conformance.1,v 1.5 2025/05/05 23:18:29 snw Exp $
1.1 snw 3: .\"
4: .\" Author: Serena Willis <snw@coherent-logic.com>
5: .\" Copyright (C) 2025 Coherent Logic Development LLC
6: .\"
7: .\" This file is part of FreeM.
8: .\"
9: .\" FreeM is free software: you can redistribute it and/or modify
10: .\" it under the terms of the GNU Affero Public License as published by
11: .\" the Free Software Foundation, either version 3 of the License, or
12: .\" (at your option) any later version.
13: .\"
14: .\" FreeM is distributed in the hope that it will be useful,
15: .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
16: .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: .\" GNU Affero Public License for more details.
18: .\"
19: .\" You should have received a copy of the GNU Affero Public License
20: .\" along with FreeM. If not, see <https://www.gnu.org/licenses/>.
21: .\"
1.2 snw 22: .\" $Log: freem_conformance.1,v $
1.6 ! snw 23: .\" Revision 1.5 2025/05/05 23:18:29 snw
! 24: .\" Update conformance document to cover the idiotic numeric coercion rules around E notation
! 25: .\"
1.5 snw 26: .\" Revision 1.4 2025/05/05 04:48:17 snw
27: .\" Update conformance document
28: .\"
1.4 snw 29: .\" Revision 1.3 2025/05/03 03:07:55 snw
30: .\" Documentation updates
31: .\"
1.3 snw 32: .\" Revision 1.2 2025/05/02 16:25:46 snw
33: .\" -m
34: .\"
1.2 snw 35: .\" Revision 1.1 2025/05/02 15:19:32 snw
36: .\" Add conformance clause man page
1.1 snw 37: .\"
1.2 snw 38: .\"
39: .TH freem_conformance 1 "2 May 2025" FreeM "FreeM User Manual"
40: .SH NAME
41:
42: freem_conformance - FreeM MDC Conformance Document
43:
44: .SH SYNOPSIS
45:
1.6 ! snw 46: FreeM version 0.64.0 conforms to X11.1-1995, as modified by the following MDC documents:
1.2 snw 47:
48: .sp
49: .RS 4
50: .ie n \{\
51: \h'-04'\(bu\h'+03'\c
52: .\}
53: .el \{\
54: .sp -1
55: .IP \(bu 2.3
56: .\}
57: X11/1998-28 Event Processing (MDC status A)
58: .RE
59: .sp
60: .RS 4
61: .ie n \{\
62: \h'-04'\(bu\h'+03'\c
63: .\}
64: .el \{\
65: .sp -1
66: .IP \(bu 2.3
67: .\}
68: X11/1998-31 IF THEN & ELSE (MDC status A)
69: .RE
70: .sp
71: .RS 4
72: .ie n \{\
73: \h'-04'\(bu\h'+03'\c
74: .\}
75: .el \{\
76: .sp -1
77: .IP \(bu 2.3
78: .\}
79: X11/95-118 Undefined ssvns (MDC status A)
80: .RE
81: .sp
82: .RS 4
83: .ie n \{\
84: \h'-04'\(bu\h'+03'\c
85: .\}
86: .el \{\
87: .sp -1
88: .IP \(bu 2.3
89: .\}
90: X11/96-13 Portable length limit of names (MDC status A)
91: .RE
92:
93: with the following exceptions:
94: .SH EXCEPTIONS
95:
96: .TP
97: Aliases
98: .RS 4
99: FreeM supports aliases for local variables that can reference either the root node or a subtree:
100:
101: .EX
102: USER> S X(3)="harps"
103:
104: USER> S J=.X(3)
105:
106: USER> S J(8)=17
107:
108: USER> ZWR X
109: X(3)=harps
110: X(3,8)=17
111: .EE
112:
113: Aliases used in pass-by-reference can also reference entire subtrees instead of just the root node:
114:
115: .EX
116: USER> ZL TEST
117:
118: USER> ZP
119:
120: TEST ;
121: S X(3)=4
122: D SUBR(.X(3))
123: ZWR X
124: QUIT
125: ;
126: SUBR(A) ;
127: S A(4)="thwack!"
128: QUIT
129:
130: USER> D ^TEST
131: X(3)=4
132: X(3,4)=thwack!
133: .EE
134: .RE
135:
136: .TP
137: Environments
138: .RS 4
139: 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.
140: .RE
141: .TP
142: Indirection
143: .RS 4
144: 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:
145: .sp
146: .RS 4
147: .ie n \{\
148: \h'-04'\(bu\h'+03'\c
149: .\}
150: .el \{\
151: .sp -1
152: .IP \(bu 2.3
153: .\}
154: FOR loops in FreeM support argument indirection
155: .RE
156: .sp
157: .RS 4
158: .ie n \{\
159: \h'-04'\(bu\h'+03'\c
160: .\}
161: .el \{\
162: .sp -1
163: .IP \(bu 2.3
164: .\}
165: FreeM supports list indirection, such as \fBS X="1,2,3",ARGS="X,"","",2" W $P(@ARGS)\fR, which will output \fB2\fR
166: .RE
167: .RE
168: .TP
169: \fBMERGE\fR
170: .RS 4
171: \fBMERGE\fR should be implemented as \fB[MERGE] postcond SP L mergeargument\fR, but is currently implemented as \fBM[ERGE] postcond SP mergeargument\fR.
172: .RE
173: .TP
174: \fBKVALUE\fR and \fBKSUBSCRIPTS\fR
175: .RS 4
176: Only the inclusive forms of these commands are currently implemented.
177: .RE
178: .TP
179: Transaction Processing
180: .RS 4
181: Restartable transactions are not implemented.
182: .RE
183: .TP
184: Event Processing
185: .RS 4
186: .sp
187: .RS 4
188: .ie n \{\
189: \h'-04'\(bu\h'+03'\c
190: .\}
191: .el \{\
192: .sp -1
193: .IP \(bu 2.3
194: .\}
195: \fBETRIGGER\fR is not implemented
196: .RE
197: .sp
198: .RS 4
199: .ie n \{\
200: \h'-04'\(bu\h'+03'\c
201: .\}
202: .el \{\
203: .sp -1
204: .IP \(bu 2.3
205: .\}
206: Of the event classes defined in \fIX11/1998-28\fR, only the \fBINTERRUPT\fR \fIevclass\fR is implemented
207: .RE
208: .sp
209: .RS 4
210: .ie n \{\
211: \h'-04'\(bu\h'+03'\c
212: .\}
213: .el \{\
214: .sp -1
215: .IP \(bu 2.3
216: .\}
217: The \fBTRIGGER\fR \fIevclass\fR is nonstandard
218: .RE
219: .sp
220: .RS 4
221: .ie n \{\
222: \h'-04'\(bu\h'+03'\c
223: .\}
224: .el \{\
225: .sp -1
226: .IP \(bu 2.3
227: .\}
228: The \fB^$EVENT\fR \fIssvn\fR is incomplete
229: .RE
230: .sp
231: .RS 4
232: .ie n \{\
233: \h'-04'\(bu\h'+03'\c
234: .\}
235: .el \{\
236: .sp -1
237: .IP \(bu 2.3
238: .\}
239: Environment-wide events defined in \fB^$SYSTEM\fR are nonstandard
240: .RE
241: .RE
242: .TP
243: \fBDO\fR and \fBGOTO\fR
244: .RS 4
1.3 snw 245: 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.
1.2 snw 246: .RE
247: .TP
248: \fBIF\fR and \fBELSE\fR
249: .RS 4
250: Both of these commands allow a \fIpostcondition\fR in FreeM.
251: .RE
252:
253: \fBLOCK\fR
254: .RS 4
255: 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.
256: .RE
257: .TP
258: Miscellaneous Language Features
259: .RS 4
260: .sp
261: .RS 4
262: .ie n \{\
263: \h'-04'\(bu\h'+03'\c
264: .\}
265: .el \{\
266: .sp -1
267: .IP \(bu 2.3
268: .\}
269: \fB$DIALECT\fR intrinsic special variable
270: .RE
1.5 snw 271: .sp
272: .RS 4
273: .ie n \{\
274: \h'-04'\(bu\h'+03'\c
275: .\}
276: .el \{\
277: .sp -1
278: .IP \(bu 2.3
279: .\}
280: 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, because the MDC couldn't find a sensible set of numeric coercion rules with two hands and a flashlight.
281: .RE
282:
1.2 snw 283: .RE
284:
285: .SH SUPPORTED CHARACTER SET PROFILES
286: .RS 4
287: Supported character set profiles are:
288: .sp
289: .RS 4
290: .ie n \{\
291: \h'-04'\(bu\h'+03'\c
292: .\}
293: .el \{\
294: .sp -1
295: .IP \(bu 2.3
296: .\}
297: \fBM\fR
298: .RE
299: .RE
300:
301: .SH $SYSTEM
302: 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.
303:
304: \fB$SYSTEM\fR looks like this:
305:
306: .EX
307: 49,"hesperos:931fac9d-b2b3-4e86-adb5-6c248b87d6ae"
308: .EE
309: .SH DISABLING NONSTANDARD FEATURES
310: 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.
311:
312: See \fIThe FreeM Manual\fR (\fBinfo freem\fR) for further information.
313: .SH AUTHOR
314: Written by Serena Willis (snw@coherent-logic.com)
315:
316: .SH COPYRIGHT
317: Copyright (C) 2025 Coherent Logic Development LLC
318:
319: 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.
320:
321: .SH "SEE ALSO"
322: .PP
323: \fBfreem\fR(1),
324: \fBfmadm\fR(8),
325: \fBfreem.conf\fR(5),
326: \fBenv.conf\fR(5)
327:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>