Diff for /freem/doc/freem.texi between versions 1.44 and 1.48

version 1.44, 2025/05/05 05:16:34 version 1.48, 2025/05/05 13:13:39
Line 271  Refers to an M intrinsic special variabl Line 271  Refers to an M intrinsic special variabl
 Indicates a @emph{list} of the following item, e.g., @emph{L gvn} means @emph{list of global variable names}.  Indicates a @emph{list} of the following item, e.g., @emph{L gvn} means @emph{list of global variable names}.
 @item @emph{lvn}  @item @emph{lvn}
 Refers to the name of an M local variable.  Refers to the name of an M local variable.
   @item @emph{postcondition}
   A @emph{tvexpr} immediately following a command verb affecting that command's execution.
 @item @emph{strlit}  @item @emph{strlit}
 Refers to an M string literal.  Refers to an M string literal.
 @item @emph{ssvn}  @item @emph{ssvn}
 Refers to the name of an M structured system variable.  Refers to the name of an M structured system variable.
 @item @emph{tvexpr}  @item @emph{tvexpr}
 Refers to a truth-valued expression.  Refers to a truth-valued expression, i.e., an expression interpreted as a truth value.
 @end table  @end table
   
 @node A Note on Standards  @node A Note on Standards
Line 2011  Identical to @ref{$TRANSLATE()}, except Line 2013  Identical to @ref{$TRANSLATE()}, except
 * !::                                   Run an external program or command.  * !::                                   Run an external program or command.
 * !!::                                  Launch a subshell from FreeM direct mode.  * !!::                                  Launch a subshell from FreeM direct mode.
 * ABLOCK::                              Increment the block counter for one or more event classes.  * ABLOCK::                              Increment the block counter for one or more event classes.
 * ASSERT::                              Raise error when a conditional expression evaluates @emph{false}.  
 * ASTART::                              Enable asynchronous event handling for one or more event classes.  * ASTART::                              Enable asynchronous event handling for one or more event classes.
 * ASTOP::                               Disable asynchronous event handling for one or more event classes.  * ASTOP::                               Disable asynchronous event handling for one or more event classes.
 * AUNBLOCK::                            Decrement the block counter for one or more event classes.  * AUNBLOCK::                            Decrement the block counter for one or more event classes.
Line 2043  Identical to @ref{$TRANSLATE()}, except Line 2044  Identical to @ref{$TRANSLATE()}, except
 * VIEW::                                Modify FreeM internal parameters.  * VIEW::                                Modify FreeM internal parameters.
 * WRITE::                               Write output to current input/output device.  * WRITE::                               Write output to current input/output device.
 * XECUTE::                              Interpret string as M code.  * XECUTE::                              Interpret string as M code.
 * ZBREAK::                              Unknown.  * ZASSERT::                             Raise error when a conditional expression evaluates @emph{false}.
   * ZBREAK::                              Enable/disable ZBREAK mode.
 * ZCONST::                              Define a constant that cannot be altered after initial definition.  * ZCONST::                              Define a constant that cannot be altered after initial definition.
 * ZGO::                                 Unknown.  * ZGOTO::                               @code{GOTO} with @code{BREAK} control.
 * ZHALT::                               Unknown.  * ZHALT::                               Unknown.
 * ZINSERT::                             Insert code into routine buffer.  * ZINSERT::                             Insert code into routine buffer.
 * ZJOB::                                Invokes a job, ignoring any timeouts.  * ZJOB::                                Invokes a job, ignoring any timeouts.
Line 2182  In its inclusive form, @code{ABLOCK} inc Line 2184  In its inclusive form, @code{ABLOCK} inc
   
 In its exclusive form, @code{ABLOCK} increments the block counters for all event classes @emph{except for} those named in the list, provided the optional @emph{postcondition} is either @emph{true} or omitted.  In its exclusive form, @code{ABLOCK} increments the block counters for all event classes @emph{except for} those named in the list, provided the optional @emph{postcondition} is either @emph{true} or omitted.
   
 @node ASSERT  
 @section ASSERT  
 @cindex ASSERT  
 @cindex commands, ASSERT  
 @cindex commands, debugging  
 @cindex commands, implementation-specific  
 @cindex commands, non-standard  
 @emph{FreeM Extension}  
   
 Triggers error @code{ASSERT} if the supplied truth-valued expression @emph{tvexpr} is @emph{false} (@emph{1} is @emph{true}, and @emph{0} is @emph{false}), and that the optional @emph{postcondition} evaluates to @emph{true} or is omitted.  
   
 The @code{ASSERT} error is catchable whether using standard-style, FreeM-style, or DSM 2.0-style error processing.  
   
 @emph{Syntax}  
   
 @example  
  ASSERT@emph{:postcondition} @emph{<tvexpr>}  
 @end example  
   
 @emph{Example}  
   
 @example  
 DEFAULT.USER> SET DEBUG=1  
   
   
 DEFAULT.USER> ASSERT:DEBUG 1=1  
   
   
 DEFAULT.USER> ASSERT:DEBUG 1=0  
    
    
 >> Error ZASSERT:  programmer assertion failed in SYSTEM::^%SYSINIT  [$STACK = 0]  
 >> ASSERT:DEBUG 1=0  
                    ^  
 @end example  
   
 @node ASTART  @node ASTART
 @section ASTART  @section ASTART
Line 3353  VIEW 133:@emph{tvexpr} Line 3320  VIEW 133:@emph{tvexpr}
 @cindex XECUTE  @cindex XECUTE
 @cindex commands, XECUTE  @cindex commands, XECUTE
   
   @node ZASSERT
   @section ZASSERT
   @cindex ZASSERT
   @cindex commands, ZASSERT
   @cindex commands, debugging
   @cindex commands, implementation-specific
   @cindex commands, non-standard
   @emph{FreeM Extension}
   
   Triggers error @code{ZASSERT} if the supplied truth-valued expression @emph{tvexpr} is @emph{false} (@emph{1} is @emph{true}, and @emph{0} is @emph{false}), and that the optional @emph{postcondition} evaluates to @emph{true} or is omitted.
   
   The @code{ZASSERT} error is catchable whether using standard-style, FreeM-style, or DSM 2.0-style error processing.
   
   @emph{Syntax}
   
   @example
    ZASSERT@emph{:postcondition} @emph{<tvexpr>}
   @end example
   
   @emph{Example}
   
   @example
   DEFAULT.USER> SET DEBUG=1
   
   
   DEFAULT.USER> ZASSERT:DEBUG 1=1
   
   
   DEFAULT.USER> ZASSERT:DEBUG 1=0
    
    
   >> Error ZASSERT:  programmer assertion failed in SYSTEM::^%SYSINIT  [$STACK = 0]
   >> ZASSERT:DEBUG 1=0
                      ^
   @end example
   
 @node ZBREAK  @node ZBREAK
 @section ZBREAK  @section ZBREAK
 @cindex ZBREAK  @cindex ZBREAK
Line 3362  VIEW 133:@emph{tvexpr} Line 3365  VIEW 133:@emph{tvexpr}
 @cindex commands, non-standard  @cindex commands, non-standard
 @emph{FreeM Extension}  @emph{FreeM Extension}
   
   Sets or clears the @code{ZBREAK} flag@footnote{NOTE: FreeM team needs to investigate how @code{zbreakon} and @code{zbflag} affect program execution.}, based on the result of evaluating @emph{tvexpr}.
   
   @emph{Syntax}
   
   @example
   ZBREAK @emph{tvexpr}
   @end example
   
 @node ZCONST  @node ZCONST
 @section ZCONST  @section ZCONST
 @cindex ZCONST  @cindex ZCONST
Line 3379  Constants must only be locals, and globa Line 3390  Constants must only be locals, and globa
 @code{ZCONST@emph{:postcondition} @emph{mref1}=@emph{initial-value1},...,@emph{mrefN}=@emph{initial-valueN}}  @code{ZCONST@emph{:postcondition} @emph{mref1}=@emph{initial-value1},...,@emph{mrefN}=@emph{initial-valueN}}
 @end example  @end example
   
 @node ZGO  @node ZGOTO
 @section ZGO  @section ZGOTO
 @cindex ZGO  @cindex ZGOTO
 @cindex commands, ZGO  @cindex commands, ZGOTO
 @cindex commands, implementation-specific  @cindex commands, implementation-specific
 @cindex commands, non-standard  @cindex commands, non-standard
 @emph{FreeM Extension}  @emph{FreeM Extension}
   
   In its argumented form, enables @code{BREAK} mode and branches unconditionally to @emph{entryref}.
   
   @emph{Syntax}
   
   @example
   ZGOTO @emph{entryref}
   @end example
   
   In its argumented form, resumes execution after a @code{BREAK}.
   
   @emph{Syntax}
   
   @example
   ZGOTO
   @end example
   
 @node ZHALT  @node ZHALT
 @section ZHALT  @section ZHALT
 @cindex ZHALT  @cindex ZHALT
Line 3395  Constants must only be locals, and globa Line 3422  Constants must only be locals, and globa
 @cindex commands, non-standard  @cindex commands, non-standard
 @emph{FreeM Extension}  @emph{FreeM Extension}
   
   In its single-argumented form, @code{ZHALT} command is used to exit the FreeM process with a specific return value @emph{intexpr}.
   
   @emph{Syntax}
   
   @example
   ZHALT @emph{intexpr}
   @end example
   
   In its argumentless form, @code{ZHALT} is synonymous with @code{HALT}.
   
   @emph{Syntax}
   
   @example
   ZHALT
   @end example
   
 @node ZINSERT  @node ZINSERT
 @section ZINSERT  @section ZINSERT
 @cindex ZINSERT  @cindex ZINSERT
Line 4944  If you use other M implementations, you Line 4987  If you use other M implementations, you
 @cindex object-oriented programming  @cindex object-oriented programming
 @cindex programming, object-oriented  @cindex programming, object-oriented
   
   @menu
   * Classes::                             The organizing concept of object-oriented programming.
   * Inheritance::                         Making one class derive from another.
   * Methods::                             Attach code to classes.
   * Public and Private Variables::        Determining accessibility.
   * Instantiating Objects::               Creating instances of classes.
   @end menu
   
   @node Classes
 @section Classes  @section Classes
 @subsection Class Overview  @subsection Class Overview
   
Line 5000  DESTROY(THIS) ; Line 5051  DESTROY(THIS) ;
   Q    Q
 @end example  @end example
   
   @node Inheritance
 @section Inheritance  @section Inheritance
   
 Every class you create will automatically inherit the methods and functionality of the @code{OBJECT} class, supplied with FreeM.  Every class you create will automatically inherit the methods and functionality of the @code{OBJECT} class, supplied with FreeM.
Line 5018  You can achieve runtime polymorphism by Line 5070  You can achieve runtime polymorphism by
   
 Note that the overridden method in the subclass can take a different set or number of arguments than the @emph{formallist} of the superclass method would specify.  Note that the overridden method in the subclass can take a different set or number of arguments than the @emph{formallist} of the superclass method would specify.
   
   @node Methods
 @section Methods  @section Methods
 Class methods are defined as tags with @emph{formallist}s in a class routine, and per the typical FreeM object pattern, must take at least one argument, being @code{THIS} (representing a reference to the object instance being accessed).  Class methods are defined as tags with @emph{formallist}s in a class routine, and per the typical FreeM object pattern, must take at least one argument, being @code{THIS} (representing a reference to the object instance being accessed).
   
Line 5040  DEFAULT.USER> W MYOBJ.MYMETHOD() Line 5093  DEFAULT.USER> W MYOBJ.MYMETHOD()
 VALUE  VALUE
 @end example  @end example
   
   @node Public and Private Variables
 @section Public and Private Variables  @section Public and Private Variables
   
 FreeM supports private fields with the @code{:PRIVATE} specifier in the @code{SET} command, enforcing classical object-oriented data encapsulation. The @code{:PUBLIC} specifier is provided for completeness, and is the default.  FreeM supports private fields with the @code{:PRIVATE} specifier in the @code{SET} command, enforcing classical object-oriented data encapsulation. The @code{:PUBLIC} specifier is provided for completeness, and is the default.
Line 5062  Either of the following commands will cr Line 5116  Either of the following commands will cr
   
 Attempting to access private fields from outside of the class will raise error condition @code{ZOBJFLDACCV}.   Attempting to access private fields from outside of the class will raise error condition @code{ZOBJFLDACCV}. 
   
   @node Instantiating Objects
 @section Instantiating Objects  @section Instantiating Objects
   
 To instantiate an object (i.e., create an object from a certain class), you will use the @code{NEW} command as follows:  To instantiate an object (i.e., create an object from a certain class), you will use the @code{NEW} command as follows:
Line 5072  NEW MYSTR=$#^%STRING("myString") Line 5127  NEW MYSTR=$#^%STRING("myString")
   
 This will create a local variable called MYSTR of type STRING, and initialize it with the value myString.   This will create a local variable called MYSTR of type STRING, and initialize it with the value myString. 
   
 @section Determining Object Class  @subsection Determining Object Class
   
 To determine the class of any FreeM local variable, you will use the @code{$$TYPE()} method:  To determine the class of any FreeM local variable, you will use the @code{$$TYPE()} method:
   
Line 5669  Raised when you attempt to use multiple Line 5724  Raised when you attempt to use multiple
 Raised when attempts are made to set @code{$ECODE} to an invalid error code value. Obsolete and replaced by standard error code @code{M101}.  Raised when attempts are made to set @code{$ECODE} to an invalid error code value. Obsolete and replaced by standard error code @code{M101}.
   
 @item @code{ZASSERT} - @emph{programmer assertion failed}  @item @code{ZASSERT} - @emph{programmer assertion failed}
 Raised when an @code{ASSERT} expression's result is not true.  Raised when an @code{ZASSERT} expression's result is not true.
   
 @item @code{ZUSERERR} - @emph{user-defined error}  @item @code{ZUSERERR} - @emph{user-defined error}
 Raised when program code calls @code{THROW} with an error code argument for which the first character is @code{U}, or when @code{$ECODE} is set to an error code for which the first character is @code{U}.  Raised when program code calls @code{THROW} with an error code argument for which the first character is @code{U}, or when @code{$ECODE} is set to an error code for which the first character is @code{U}.

Removed from v.1.44  
changed lines
  Added in v.1.48


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>