Annotation of freem/doc/freem_conformance.1, revision 1.2
1.1 snw 1: .\"
1.2 ! snw 2: .\" $Id: freem_conformance.1,v 1.1 2025/05/02 15:19:32 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 $
! 23: .\" Revision 1.1 2025/05/02 15:19:32 snw
! 24: .\" Add conformance clause man page
1.1 snw 25: .\"
1.2 ! snw 26: .\"
! 27: .TH freem_conformance 1 "2 May 2025" FreeM "FreeM User Manual"
! 28: .SH NAME
! 29:
! 30: freem_conformance - FreeM MDC Conformance Document
! 31:
! 32: .SH SYNOPSIS
! 33:
! 34: FreeM version 0.64.0-rc1 conforms to X11.1-1995, as modified by the following MDC documents:
! 35:
! 36: .sp
! 37: .RS 4
! 38: .ie n \{\
! 39: \h'-04'\(bu\h'+03'\c
! 40: .\}
! 41: .el \{\
! 42: .sp -1
! 43: .IP \(bu 2.3
! 44: .\}
! 45: X11/1998-28 Event Processing (MDC status A)
! 46: .RE
! 47: .sp
! 48: .RS 4
! 49: .ie n \{\
! 50: \h'-04'\(bu\h'+03'\c
! 51: .\}
! 52: .el \{\
! 53: .sp -1
! 54: .IP \(bu 2.3
! 55: .\}
! 56: X11/1998-31 IF THEN & ELSE (MDC status A)
! 57: .RE
! 58: .sp
! 59: .RS 4
! 60: .ie n \{\
! 61: \h'-04'\(bu\h'+03'\c
! 62: .\}
! 63: .el \{\
! 64: .sp -1
! 65: .IP \(bu 2.3
! 66: .\}
! 67: X11/95-118 Undefined ssvns (MDC status A)
! 68: .RE
! 69: .sp
! 70: .RS 4
! 71: .ie n \{\
! 72: \h'-04'\(bu\h'+03'\c
! 73: .\}
! 74: .el \{\
! 75: .sp -1
! 76: .IP \(bu 2.3
! 77: .\}
! 78: X11/96-13 Portable length limit of names (MDC status A)
! 79: .RE
! 80:
! 81: with the following exceptions:
! 82: .SH EXCEPTIONS
! 83:
! 84: .TP
! 85: Aliases
! 86: .RS 4
! 87: FreeM supports aliases for local variables that can reference either the root node or a subtree:
! 88:
! 89: .EX
! 90: USER> S X(3)="harps"
! 91:
! 92: USER> S J=.X(3)
! 93:
! 94: USER> S J(8)=17
! 95:
! 96: USER> ZWR X
! 97: X(3)=harps
! 98: X(3,8)=17
! 99: .EE
! 100:
! 101: Aliases used in pass-by-reference can also reference entire subtrees instead of just the root node:
! 102:
! 103: .EX
! 104: USER> ZL TEST
! 105:
! 106: USER> ZP
! 107:
! 108: TEST ;
! 109: S X(3)=4
! 110: D SUBR(.X(3))
! 111: ZWR X
! 112: QUIT
! 113: ;
! 114: SUBR(A) ;
! 115: S A(4)="thwack!"
! 116: QUIT
! 117:
! 118: USER> D ^TEST
! 119: X(3)=4
! 120: X(3,4)=thwack!
! 121: .EE
! 122: .RE
! 123:
! 124: .TP
! 125: Environments
! 126: .RS 4
! 127: 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.
! 128: .RE
! 129: .TP
! 130: Indirection
! 131: .RS 4
! 132: 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:
! 133: .sp
! 134: .RS 4
! 135: .ie n \{\
! 136: \h'-04'\(bu\h'+03'\c
! 137: .\}
! 138: .el \{\
! 139: .sp -1
! 140: .IP \(bu 2.3
! 141: .\}
! 142: FOR loops in FreeM support argument indirection
! 143: .RE
! 144: .sp
! 145: .RS 4
! 146: .ie n \{\
! 147: \h'-04'\(bu\h'+03'\c
! 148: .\}
! 149: .el \{\
! 150: .sp -1
! 151: .IP \(bu 2.3
! 152: .\}
! 153: FreeM supports list indirection, such as \fBS X="1,2,3",ARGS="X,"","",2" W $P(@ARGS)\fR, which will output \fB2\fR
! 154: .RE
! 155: .RE
! 156: .TP
! 157: \fBMERGE\fR
! 158: .RS 4
! 159: \fBMERGE\fR should be implemented as \fB[MERGE] postcond SP L mergeargument\fR, but is currently implemented as \fBM[ERGE] postcond SP mergeargument\fR.
! 160: .RE
! 161: .TP
! 162: \fBKVALUE\fR and \fBKSUBSCRIPTS\fR
! 163: .RS 4
! 164: Only the inclusive forms of these commands are currently implemented.
! 165: .RE
! 166: .TP
! 167: Transaction Processing
! 168: .RS 4
! 169: Restartable transactions are not implemented.
! 170: .RE
! 171: .TP
! 172: Event Processing
! 173: .RS 4
! 174: .sp
! 175: .RS 4
! 176: .ie n \{\
! 177: \h'-04'\(bu\h'+03'\c
! 178: .\}
! 179: .el \{\
! 180: .sp -1
! 181: .IP \(bu 2.3
! 182: .\}
! 183: \fBETRIGGER\fR is not implemented
! 184: .RE
! 185: .sp
! 186: .RS 4
! 187: .ie n \{\
! 188: \h'-04'\(bu\h'+03'\c
! 189: .\}
! 190: .el \{\
! 191: .sp -1
! 192: .IP \(bu 2.3
! 193: .\}
! 194: Of the event classes defined in \fIX11/1998-28\fR, only the \fBINTERRUPT\fR \fIevclass\fR is implemented
! 195: .RE
! 196: .sp
! 197: .RS 4
! 198: .ie n \{\
! 199: \h'-04'\(bu\h'+03'\c
! 200: .\}
! 201: .el \{\
! 202: .sp -1
! 203: .IP \(bu 2.3
! 204: .\}
! 205: The \fBTRIGGER\fR \fIevclass\fR is nonstandard
! 206: .RE
! 207: .sp
! 208: .RS 4
! 209: .ie n \{\
! 210: \h'-04'\(bu\h'+03'\c
! 211: .\}
! 212: .el \{\
! 213: .sp -1
! 214: .IP \(bu 2.3
! 215: .\}
! 216: The \fB^$EVENT\fR \fIssvn\fR is incomplete
! 217: .RE
! 218: .sp
! 219: .RS 4
! 220: .ie n \{\
! 221: \h'-04'\(bu\h'+03'\c
! 222: .\}
! 223: .el \{\
! 224: .sp -1
! 225: .IP \(bu 2.3
! 226: .\}
! 227: Environment-wide events defined in \fB^$SYSTEM\fR are nonstandard
! 228: .RE
! 229: .RE
! 230: .TP
! 231: \fBDO\fR and \fBGOTO\fR
! 232: .RS 4
! 233: 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.
! 234: .RE
! 235: .TP
! 236: \fBIF\fR and \fBELSE\fR
! 237: .RS 4
! 238: Both of these commands allow a \fIpostcondition\fR in FreeM.
! 239: .RE
! 240:
! 241: \fBLOCK\fR
! 242: .RS 4
! 243: 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.
! 244: .RE
! 245: .TP
! 246: Miscellaneous Language Features
! 247: .RS 4
! 248: .sp
! 249: .RS 4
! 250: .ie n \{\
! 251: \h'-04'\(bu\h'+03'\c
! 252: .\}
! 253: .el \{\
! 254: .sp -1
! 255: .IP \(bu 2.3
! 256: .\}
! 257: \fB$DIALECT\fR intrinsic special variable
! 258: .RE
! 259: .sp
! 260: .RS 4
! 261: .ie n \{\
! 262: \h'-04'\(bu\h'+03'\c
! 263: .\}
! 264: .el \{\
! 265: .sp -1
! 266: .IP \(bu 2.3
! 267: .\}
! 268: \fBASSERT\fR command
! 269: .RE
! 270: .sp
! 271: .RS 4
! 272: .ie n \{\
! 273: \h'-04'\(bu\h'+03'\c
! 274: .\}
! 275: .el \{\
! 276: .sp -1
! 277: .IP \(bu 2.3
! 278: .\}
! 279: \fBCONST\fR command
! 280: .RE
! 281: .sp
! 282: .RS 4
! 283: .ie n \{\
! 284: \h'-04'\(bu\h'+03'\c
! 285: .\}
! 286: .el \{\
! 287: .sp -1
! 288: .IP \(bu 2.3
! 289: .\}
! 290: \fBMAP\fR command
! 291: .RE
! 292: .sp
! 293: .RS 4
! 294: .ie n \{\
! 295: \h'-04'\(bu\h'+03'\c
! 296: .\}
! 297: .el \{\
! 298: .sp -1
! 299: .IP \(bu 2.3
! 300: .\}
! 301: \fBTHROW\fB command
! 302: .RE
! 303: .sp
! 304: .RS 4
! 305: .ie n \{\
! 306: \h'-04'\(bu\h'+03'\c
! 307: .\}
! 308: .el \{\
! 309: .sp -1
! 310: .IP \(bu 2.3
! 311: .\}
! 312: \fBUSING\fR command
! 313: .RE
! 314: .sp
! 315: .RS 4
! 316: .ie n \{\
! 317: \h'-04'\(bu\h'+03'\c
! 318: .\}
! 319: .el \{\
! 320: .sp -1
! 321: .IP \(bu 2.3
! 322: .\}
! 323: \fBWATCH\fR command
! 324: .RE
! 325: .sp
! 326: .RS 4
! 327: .ie n \{\
! 328: \h'-04'\(bu\h'+03'\c
! 329: .\}
! 330: .el \{\
! 331: .sp -1
! 332: .IP \(bu 2.3
! 333: .\}
! 334: \fBWITH\fR command
! 335: .RE
! 336: .RE
! 337:
! 338: .SH SUPPORTED CHARACTER SET PROFILES
! 339: .RS 4
! 340: Supported character set profiles are:
! 341: .sp
! 342: .RS 4
! 343: .ie n \{\
! 344: \h'-04'\(bu\h'+03'\c
! 345: .\}
! 346: .el \{\
! 347: .sp -1
! 348: .IP \(bu 2.3
! 349: .\}
! 350: \fBM\fR
! 351: .RE
! 352: .RE
! 353:
! 354: .SH $SYSTEM
! 355: 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.
! 356:
! 357: \fB$SYSTEM\fR looks like this:
! 358:
! 359: .EX
! 360: 49,"hesperos:931fac9d-b2b3-4e86-adb5-6c248b87d6ae"
! 361: .EE
! 362: .SH DISABLING NONSTANDARD FEATURES
! 363: 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.
! 364:
! 365: See \fIThe FreeM Manual\fR (\fBinfo freem\fR) for further information.
! 366: .SH AUTHOR
! 367: Written by Serena Willis (snw@coherent-logic.com)
! 368:
! 369: .SH COPYRIGHT
! 370: Copyright (C) 2025 Coherent Logic Development LLC
! 371:
! 372: 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.
! 373:
! 374: .SH "SEE ALSO"
! 375: .PP
! 376: \fBfreem\fR(1),
! 377: \fBfmadm\fR(8),
! 378: \fBfreem.conf\fR(5),
! 379: \fBenv.conf\fR(5)
! 380:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>