SWITCH

From ICE Enterprises
Jump to navigation Jump to search

Define static switches or get a switch value into a results parameter

<NAME>  Name of the switch
<VALUE> Switch value for SET; Switch value label for GET (default) and DEL
<FUNC>  Action to perform (GET[DEF], GETALL, SET, or DEL)
<DEF>   Default value if switch is not present
<SDEF>  Default value if only a state switch is present

SWITCH is the mechanism by which macros define their own switches and branch
in response to switches.

Functions:
  GET   - Gets a particular switch and stores its value in a result

          Syntax:
            SWITCH <NAME> <VALUE> GET <DEF> <SDEF>

            <NAME>  The name of the switch (e.g. "MYSWITCH")
            <VALUE> The label of the result to store the value of the
                    switch in (e.g. "MYVALUE")
            <DEF>   The default value if the switch is not specified
            <SDEF>  The default value to use if the switch is given as a
                    state switch (usually "true" or "1"). If not set,
                    the empty string ("") will be used.

  SET  - The SET function works the same as the GET, but has the effect of
         setting the highest precedence for the value of the switch. This was
         done to allow commands within a macro to NOT inherit values of
         designated switches. See example. (Since NeXtMidas 2.9.0)

         Syntax:
            SWITCH <NAME> <VALUE> SET

            <NAME>  The name of the switch (e.g. "MYSWITCH")
            <VALUE> The value to set the switch to, or the label of the
                    result containing the value

  DEL  - The DEL function allows the user to delete any current value for the
         switch. This also allows for users to not inherit a values of
         designated switches, but does not set a value in turn.
         See example. (Since NeXtMidas 2.9.0)

         Syntax:
            SWITCH <NAME> <VALUE> DEL

            <NAME>  The name of the switch (e.g. "MYSWITCH")
            <VALUE> The label of the result to store the previous value of
                    the switch (since neXtMidas 3.1.3)

  GETALL - Gets all switches and stores their values in a result. Note that
           this function works by looking at all switches passed in on the
           macro's command line rather than looking only for a pre-defined
           set of switches. (Since NeXtMidas 2.9.0)

           Syntax:
             SWITCH ,, <VALUE> GETALL ,, <SDEF>

             <VALUE> The name of the table to put the switches in. If the table
                     exists, the contents of the table will be used as default
                     values (like <DEF> with GET)
             <SDEF>  The default value to use if the switch is given as a
                     state switch (usually "true" or "1"). If not set,
                     the empty string ("") will be used.


In NeXtMidas, most switches can be tested in logical test directly, as with

  if /C then
    ...
  else
    ...
  endif

The same syntax works on numeric or string values, as with

  if /FN eqs "MYFILE"
or
  if /N gt 4

The switch statement is useful for applying defaults to switches that may
or may not be present, as with

  switch FN fnlabel get "MYFILE"
or
  switch N nlabel get 20

which applies the defaults "MYFILE" and 20 to those switches, if they are not
applied. String valued switches that supply the <SDEF> parameter will set the
value to <DEF> if the switch is not present, or <SDEF> if the switch is present
but no =value is given.

SWITCH inheritance:
  1. Switches right after the command (no space in-between) are inherited by
     primitive and intrinsic commands called by the command. e.g.
     MYMACRO/ASWITCH arg1 arg2

  2. Switches at END of argument list are the same as the above but they are
     also inherited by macro commands called by the command. e.g.
     MYMACRO arg1 arg2 /ASWITCH

SWITCH precedence (order):
  1. Macro command line (passed in when macro is run)
  2. Commands (macros,primitives,intrinsics) in the macro
  3. Command dictionary (commands.cnf)
  4. Macro Defaults (on startmacro line)
     eg. startmacro/switch


Examples:

  1. Set fnlabel to "NOFN" if no switch is present, or "MYFILE" if just /FN is
    present. If /FN=<text> is present, fnlabel will have the value of <text>.

      switch FN fnlabel get "NOFN" "MYFILE"

  2. A switch command with its own switch has the effect of setting the default:

       switch MYSW myres /MYSW=10

  3. Allow child macro to see a pipes created in calling macro

       mymacro/sharemask=pipes

  4. Set the value of a switch regardless of what is passed in on the command
     line (ignore precedence):

       switch name="MYSWITCH"  value=15  func=set

  5. Delete a current switch but store its value, if it exists.

        switch name="MYSWITCH" value=savedVal func=del

  6. Get all switches passed to the macro

        switch ,, mytable ,, GETALL ,, 1

  7. Use the switches passed to the macro to override a set of defaults

        set t:mytable {SWITCH1="VALUE1",SWITCH2="VALUE2"}
        switch ,, mytable ,, GETALL ,, 1

Switches:
  /CS     - Get a case-sensitive value (for FUNC=GET) without requiring user to
            quote strings.                                         (Since 3.1.2)
  /QUIET  - Disable verbose messages (overrides universal /VERBOSE switch).
                                                                   (Since 3.3.0)

  Graphical Command Switches:
    Applies to anything that extends nxm.sys.lib.MWindow, like PLOT, LIST2,
      GCONTROLS, etc.
    /DISPLAY=       - Make window come up in specified display mode:
                        Icon, Back, Front, or Maximized.           (Since 3.1.1)
    /EVENTFILTER=   - Window event filter mask (e.g. NoMouse,NoKeyboard,NoMove,
                      NoPushPop,NoMiddleMouse). For complete list of values
                      see nxm.sys.libg.MWindow.eventFilterList.    (Since 3.3.1)
    /ICON           - Make window come up in icon state.           (Since 3.1.0)
    /NOALTTITLE     - Disables automatic updates to the status/title bar text
                      from events such as mouse hovers.            (Since 3.3.0)
    /NOPUSHPOP      - Disable window push/pop out/in of panel. The /EVENTFILTER=
                      switch takes precedence over this.
    /SHARETHEME     - Whether or not to have all graphical components share
                      the same Theme.                              (Since 3.3.0)
    /THEME=         - Specifies the THEME to use. See EXPLAIN LOOKANDFEEL.
    /WDISP=         - Specifies the Window DISPlay to use (i.e. specifies which
                      monitor for systems with 2+ monitors).
    /WFS=           - Window or widget font size.
    /WIN=           - Specifies the name of WINdow (or panel) in the registry
                      that will host this window. If the window name is not
                      specified, or included in panel config, a new frame is
                      is created.
    /WIN.<cmd>=     - Similar to /WIN.
    /WIN.NEW        - Always open in a new frame.
    /WPOS=(x,y,w,h) - Window position in pixels. Width and height are optional.
    /WTITLE=        - Window title.

  Macro Switches:
    /MSGDEBUG=mask  - Enable debugging printout of messages processed (e.g.
                      received) by macro. Default for just specifying as a state
                      switch is NAME|INFO|DATA|QUALS|FID|TID.         [DEF=NONE]
                                                                   (Since 2.7.1)
    /SHAREMASK=     - Control whether or not a child macro (a macro called from
                      another macro) can see the parent's (calling macro) pipes.
                      Currently the only options are "PIPES".         [DEF=NONE]
                                                                   (Since 2.7.3)

  Pipe and File Switches:
    /AUX=           - Specifies which AUX to use for file. The {AUX=<aux_name>}
                      file qualifier takes precedence over this.
    /PS=            - Pipe Size in bytes. [DEF=131072]
    /TLL=           - TimeLine length [DEF=128]
    /TLT=           - TimeLine tolerance [DEF=0.1]

  Universal Switches for all command (when handled by NeXtMidas proper):
    /BG             - Run command in BackGround. [DEF=FALSE]
    /CMDOPENTIMEOUT=- Provides a way for a command run in a pipe section to NOT
                      wait for a very slow open() to complete before running
                      the next command in the pipe section.
                      [DEF=-1 for effectively infinite] (Since NeXtMidas 2.7.4)
    /CMDRUNMODE=    - Provides a way for a command to override its default run
                      mode behaviors. An example of this is running a primitive
                      to completion in a pipe section. Possible values:
                        Default         - Use default behavior (this is the
                                          default)
                        RunToCompletion - Run command to completion rather than
                                          following the normal pipe section
                                          rules, note that this does override
                                          /BG. (Since NeXtMidas 3.5.4)
    /ID=            - Associate an ID to a command. Only primitive, host
                      primitive, or macro IDs are used for message passing,
                      entry in the registry, etc. [DEF=based on command name]
    /MSGID=         - Sets the ID of the registry entry that will process
                      messages sent by this command. Using /MSGID=MAIN will
                      send all messages to the macro's processMessage procedure.
                      [DEF=none]
    /POLL=          - Time (in seconds) between process loops (e.g. reads of a
                      file) when there are no data to process. [DEF=ENV.PAUSE]
    /VERBOSE        - Produce more screen (verbose) output. [DEF=FALSE in macro,
                      TRUE at shell prompt]