Diff for /freem/doc/freem.texi between versions 1.27 and 1.28

version 1.27, 2025/04/18 15:39:23 version 1.28, 2025/04/18 19:43:18
Line 235  Steve Zeck (Code) Line 235  Steve Zeck (Code)
 $ @command{./freem} [@emph{OPTIONS}...] [[-r <entryref>] | [--routine=<entryref>]]  $ @command{./freem} [@emph{OPTIONS}...] [[-r <entryref>] | [--routine=<entryref>]]
 @end example  @end example
   
 When FreeM loads, it searches the @code{SYSTEM} namespace for the @code{^%SYSINIT} routine, and begins executing it.  When FreeM loads, it searches the @code{SYSTEM} namespace for the @code{%SYSINIT} routine, and begins executing it.
   
 When @code{-r} or @code{--routine} are passed on the command line, FreeM will load and run the specified routine after running @code{^%SYSINIT}. Beginning with FreeM 0.1.7, routines invoked in this manner are no longer required to perform their own namespace setup with @code{VIEW} commands.  When @code{-r} or @code{--routine} are passed on the command line, FreeM will load and run the specified routine after running @code{%SYSINIT}. Beginning with FreeM 0.1.7, routines invoked in this manner are no longer required to perform their own namespace setup with @code{VIEW} commands.
   
 @section %SYSINIT Routine  @section %SYSINIT Routine
   
 The @code{^%SYSINIT} routine runs every time a FreeM interpreter process starts. This routine defines some useful constants, enables handling of @code{TRIGGER} events, and handles the execution of code passed via the @code{-x\--execute} or routines passed via @code{-r|--routine}.  The @code{%SYSINIT} routine runs every time a FreeM interpreter process starts. This routine defines some useful constants, enables handling of @code{TRIGGER} events, and handles the execution of code passed via the @code{-x\--execute} or routines passed via @code{-r|--routine}.
   
 Do not modify the supplied @code{^%SYSINIT} routine to add site-specific startup items. Instead, create a @code{^LCLINIT} routine in the @code{USER} namespace of one or more environments. @code{^%SYSINIT} will automatically run @code{^LCLINIT} each time it starts.  Do not modify the supplied @code{%SYSINIT} routine to add site-specific startup items. Instead, create a @code{LCLINIT} routine in the @code{USER} namespace of one or more environments. @code{%SYSINIT} will automatically run @code{LCLINIT} each time it starts.
   
 @section Command-Line Options  @section Command-Line Options
 @cindex options, command-line  @cindex options, command-line
Line 278  Allows your M routines to be used as UNI Line 278  Allows your M routines to be used as UNI
 Selects the FreeM namespace to be entered on startup. Must be defined in @file{/etc/<environment>/freem.conf}.  Selects the FreeM namespace to be entered on startup. Must be defined in @file{/etc/<environment>/freem.conf}.
   
 @item @option{-r @emph{<entryref>}}, @option{--routine=@emph{<entryref>}}  @item @option{-r @emph{<entryref>}}, @option{--routine=@emph{<entryref>}}
 Causes @code{<entryref>} to be executed at load, instead of @code{^%SYSINIT}.  Causes @code{<entryref>} to be executed at load, instead of @code{%SYSINIT}.
   
 @item @option{--standard=@emph{<standard>}}  @item @option{--standard=@emph{<standard>}}
 Sets the default FreeM dialect to use for new routine buffers.  Sets the default FreeM dialect to use for new routine buffers.
Line 435  Displays a list of @code{LOCK}s held in Line 435  Displays a list of @code{LOCK}s held in
 @item @command{rbuf}  @item @command{rbuf}
 Lists the status of all FreeM routine buffers.  Lists the status of all FreeM routine buffers.
   
 @anchor{dbstats}  
 @item @command{dbstats}  
 Shows statistics for the BerkeleyDB global handler.  
   
 @anchor{wh}  @anchor{wh}
 @item @command{wh}  @item @command{wh}
 Forces an immediate flush of this process's @code{readline} history buffer to disk.  Forces an immediate flush of this process's @code{readline} history buffer to disk.
Line 474  DEFAULT.USER> Line 470  DEFAULT.USER>
 @end example  @end example
   
 @item @command{!@emph{<external-command>}}  @item @command{!@emph{<external-command>}}
 Invokes a shell to run @emph{<external-command>} from within FreeM. This temporarily disables @command{SIGALRM} handling in FreeM, which may interrupt the use of event-driven M programming commands including @command{ESTART} and @command{ESTOP}.  Invokes a shell to run @emph{<external-command>} from within FreeM. This temporarily disables @command{SIGALRM} handling in FreeM, which may interrupt the use of event-driven M programming commands including @command{ASTART} and @command{ASTOP}.
   
 If the @command{>} character is supplied immediately preceding @emph{<external-command>}, FreeM will append the contents of an M local or global variable referenced in @code{^$JOB($JOB,"PIPE_GLVN")} to the standard input stream of @emph{<external-command>}.  If the @command{>} character is supplied immediately preceding @emph{<external-command>}, FreeM will append the contents of an M local or global variable referenced in @code{^$JOB($JOB,"PIPE_GLVN")} to the standard input stream of @emph{<external-command>}.
   
Line 663  Please note that FreeM is not entirely s Line 659  Please note that FreeM is not entirely s
   
 Returns a comma-delimited list of error conditions currently present, and is writable. An empty @code{$ECODE} indicates no errors.  Returns a comma-delimited list of error conditions currently present, and is writable. An empty @code{$ECODE} indicates no errors.
   
   Writing a value in the format @code{,<error-code>,} into @code{$ECODE} will raise that error condition.
   
 @node $ESTACK  @node $ESTACK
 @section $ESTACK  @section $ESTACK
 @cindex $ESTACK  @cindex $ESTACK
Line 1242  The optional fourth argument is the fina Line 1240  The optional fourth argument is the fina
 Can be used on the left-hand side of an expression in order to @code{@ref{SET}} a value into a @code{d}-delimited piece of @code{s}, as in:  Can be used on the left-hand side of an expression in order to @code{@ref{SET}} a value into a @code{d}-delimited piece of @code{s}, as in:
   
 @example  @example
 ; ^jpw="this^is^a^piece"  ; ^snw="this^is^a^piece"
 SET $PIECE(^jpw,"^",2)="isn't" ; => "this^isn't^a^piece"  SET $PIECE(^snw,"^",2)="isn't" ; => "this^isn't^a^piece"
 @end example  @end example
   
 @node $QLENGTH()  @node $QLENGTH()
Line 1275  Returns the number of subscripts in @emp Line 1273  Returns the number of subscripts in @emp
 @code{$QSUBSCRIPT(@emph{expr V glvn},@emph{expr V n})}  @code{$QSUBSCRIPT(@emph{expr V glvn},@emph{expr V n})}
 @end example  @end example
   
 Returns the @emph{n}th subscript of @emph{glvn}.  In the RHS form, returns the @emph{n}th subscript of @emph{glvn}.
   
 @emph{Example}  @emph{Example}
   
Line 1283  Returns the @emph{n}th subscript of @emp Line 1281  Returns the @emph{n}th subscript of @emp
 @code{SET SUB=$QSUBSCRIPT("^GBL(1,2,3)",2) ; => 2}  @code{SET SUB=$QSUBSCRIPT("^GBL(1,2,3)",2) ; => 2}
 @end example  @end example
   
   @emph{Syntax}
   
   @example
   @code{SET $QSUBSCRIPT(@emph{expr V glvn},@emph{expr V n})=@emph{expr} ; => ^GBL(1,4,3)}
   @end example
   
   In the LHS form, sets the @emph{n}th subscript of @emph{glvn} to @emph{expr}.
   
 @node $QUERY()  @node $QUERY()
 @section $QUERY  @section $QUERY
 @cindex $QUERY  @cindex $QUERY
Line 1300  Returns the next subscripted reference i Line 1306  Returns the next subscripted reference i
   
 We will assume the following data structure exists:  We will assume the following data structure exists:
 @example  @example
 ^jpw(1)=1  ^snw(1)=1
 ^jpw(1,2)="foo"  ^snw(1,2)="foo"
 ^jpw(2)=3  ^snw(2)=3
 ^jpw(3)=""  ^snw(3)=""
 @end example  @end example
   
 The following code will retrieve the next subscripted name after @code{^jpw(1)}:  The following code will retrieve the next subscripted name after @code{^snw(1)}:
   
 @example  @example
 @code{SET NEXTNAM=$QUERY(^jpw(1)) ; => ^jpw(1,2)}  @code{SET NEXTNAM=$QUERY(^snw(1)) ; => ^snw(1,2)}
 @end example  @end example
   
 @node $RANDOM()  @node $RANDOM()
Line 3300  WATCH[@emph{:postcondition}] [+|-|?]@emp Line 3306  WATCH[@emph{:postcondition}] [+|-|?]@emp
 @end example  @end example
   
   
 The following example demonstrates turning watchpoint processing on and adding a watchpoint for global variable @code{^jpw(1)}. It then changes the value of @code{^jpw(1)}.  The following example demonstrates turning watchpoint processing on and adding a watchpoint for global variable @code{^snw(1)}. It then changes the value of @code{^snw(1)}.
   
 @example  @example
 DEFAULT.USER> WATCH  DEFAULT.USER> WATCH
     
 Watchpoints enabled.  Watchpoints enabled.
     
 DEFAULT.USER> WATCH +^JPW(1)  DEFAULT.USER> WATCH +^SNW(1)
     
 Added '^JPW("1")' to the watchlist.  Added '^SNW("1")' to the watchlist.
     
 DEFAULT.USER> SET ^JPW(1)="new value"  DEFAULT.USER> SET ^SNW(1)="new value"
     
 >> WATCHPOINT:  ^JPW("1") => 'new value' (changed 1 times)  >> WATCHPOINT:  ^SNW("1") => 'new value' (changed 1 times)
   
 @end example  @end example
   
 The following example will remove that watchpoint:  The following example will remove that watchpoint:
   
 @example  @example
 DEFAULT.USER> WATCH -^JPW(1)  DEFAULT.USER> WATCH -^SNW(1)
     
 Removed '^JPW("1")' from the watchlist.  Removed '^SNW("1")' from the watchlist.
     
 DEFAULT.USER> WATCH ?^JPW(1)  DEFAULT.USER> WATCH ?^SNW(1)
     
 '^JPW("1")' is not being watched.  '^SNW("1")' is not being watched.
 @end example  @end example
   
 @node WITH  @node WITH
Line 4166  Forces a number to positive, whether pos Line 4172  Forces a number to positive, whether pos
 @section Unary -  @section Unary -
 @cindex operators, unary -  @cindex operators, unary -
   
   Forces a number to negative, whether positive or negative. Also forces numeric coercion of strings.
   
 @node +  @node +
 @section + (Add)  @section + (Add)
 @cindex operators, +  @cindex operators, +
   
   @emph{Syntax}
   
   @example
   S X=1+2 ; => 3
   @end example
   
   Adds numbers together.
   
 @node +=  @node +=
 @section += (Add/Assign)  @section += (Add/Assign)
 @cindex operators, +=  @cindex operators, +=
   
   @emph{Syntax}
   
   @example
   S X=5
   S X+=3 ; => 8
   @end example
   
   Increments the variable on the LHS by the value on the RHS.
   
 @node ++  @node ++
 @section ++ (Postfix Increment)  @section ++ (Postfix Increment)
 @cindex operators, ++  @cindex operators, ++
   
   Increments a variable by 1.
   
 @node -  @node -
 @section - (Subtract)  @section - (Subtract)
 @cindex operators, -  @cindex operators, -
   
   Subtracts one number from another.
   
 @node -=  @node -=
 @section -= (Subtract/Assign)  @section -= (Subtract/Assign)
 @cindex operators, -=  @cindex operators, -=
   
   @emph{Syntax}
   
   @example
   S X=5
   S X-=3 ; => 2
   @end example
   
   Decrements the variable on the LHS by the value on the RHS.
   
 @node --  @node --
 @section -- (Postfix Decrement)  @section -- (Postfix Decrement)
 @cindex operators, --  @cindex operators, --
   
   Decrements the variable by one.
   
 @node *  @node *
 @section * (Multiply)  @section * (Multiply)
 @cindex operators, *  @cindex operators, *
   
   Multiplies one number by another.
   
 @node *=  @node *=
 @section *= (Multiply/Assign)  @section *= (Multiply/Assign)
 @cindex operators, *=  @cindex operators, *=
   
   
   
 @node /  @node /
 @section / (Divide)  @section / (Divide)
 @cindex operators, /  @cindex operators, /
Line 4606  TL1:DEFAULT.USER> trantab Line 4650  TL1:DEFAULT.USER> trantab
    -------   ------         --------     -------   ------         --------
    1         SET            ^FOO=3     1         SET            ^FOO=3
    2         KILL           ^FOO     2         KILL           ^FOO
    3         SET            ^jpw=10     3         SET            ^snw=10
    4         SET            ^BRANDNEW=6     4         SET            ^BRANDNEW=6
   
   Global checkpoints:    Global checkpoints:
Line 4614  TL1:DEFAULT.USER> trantab Line 4658  TL1:DEFAULT.USER> trantab
    GLOBAL                        MODE                FILES     GLOBAL                        MODE                FILES
    ------                        ----                -----     ------                        ----                -----
    ^BRANDNEW                     CP_REMOVE           IN:   /usr/local/var/freem/USER/globals/^BRANDNEW     ^BRANDNEW                     CP_REMOVE           IN:   /usr/local/var/freem/USER/globals/^BRANDNEW
    ^jpw                          CP_RESTORE          IN:   /usr/local/var/freem/USER/globals/^jpw     ^snw                          CP_RESTORE          IN:   /usr/local/var/freem/USER/globals/^snw
                                                      OUT:  /usr/local/var/freem/USER/globals/^jpw.23390.1.chk                                                       OUT:  /usr/local/var/freem/USER/globals/^snw.23390.1.chk
    ^FOO                          CP_RESTORE          IN:   /usr/local/var/freem/USER/globals/^FOO     ^FOO                          CP_RESTORE          IN:   /usr/local/var/freem/USER/globals/^FOO
                                                      OUT:  /usr/local/var/freem/USER/globals/^FOO.23390.1.chk                                                       OUT:  /usr/local/var/freem/USER/globals/^FOO.23390.1.chk
 @end verbatim  @end verbatim
Line 4834  You can also set up a trigger that appli Line 4878  You can also set up a trigger that appli
   
 This routine is the implementation of the @code{$ZCOLUMNS} intrinsic special variable.  This routine is the implementation of the @code{$ZCOLUMNS} intrinsic special variable.
   
 @section ^%SYSINIT  @section %SYSINIT
 @cindex ^%SYSINIT  @cindex %SYSINIT
 @cindex system library routines, ^%SYSINIT  @cindex system library routines, %SYSINIT
   
 This routine is the default startup routine for FreeM running in direct mode.  This routine is the default startup routine for FreeM running in direct mode.
   
Line 6059  Module headers should adhere to the foll Line 6103  Module headers should adhere to the foll
  *    binding library   *    binding library
  *   *
  *     *  
  *   Author: Serena Willis <jpw@coherent-logic.com>   *   Author: Serena Willis <snw@coherent-logic.com>
  *    Copyright (C) 1998 MUG Deutschland   *    Copyright (C) 1998 MUG Deutschland
  *    Copyright (C) <Year> Coherent Logic Development LLC   *    Copyright (C) <Year> Coherent Logic Development LLC
  *   *

Removed from v.1.27  
changed lines
  Added in v.1.28


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