Current Page: NeXtMidas Training X-Midas Interoperability NeXtOpt Messages Translated Messages
- - | "Translated" NeXtMidas Messages: A "translated" NeXtMidas message is one that has been put in the form of a `/NM/` message usable in X-Midas. The `/NM/` message has the following fields:
    MSG_NAME | NeXtMidas message name.
    MSG_INFO | NeXtMidas message info.
    MSG_DATA | NeXtMidas message data.
    MSG_FID | NeXtMidas message from ID. (NM->XM only)
    MSG_TID | NeXtMidas message to ID. (NM->XM only)
- - In this case `MSG_DATA`, is the text form of an XMValue. Due to the way X-Midas messaging works, `MSG_DATA` can not contain any "live" objects. All objects will be converted to an XMValue-compatible form (string, number, or table) before sending. Conversely messages received from X-Midas will be in a XMValue-compatible form and primitives should use the appropriate Convert methods (e.g. `Convert.o2t(..)`) rather than casting `msg.getData()` to a specific object type. Sending messages to NeXtMidas: Sending the messages has the following form:
        message send /NM/ <id> ,, <msg_name> <msg_info> <msg_data>
- - Receiving messages from NeXtMidas: Most NeXtMidas primitives (e.g. `PLOT`) will send messages if the `/MSGID=` switch is given. Setting `/MSGID=XM.1` will send messages to the X-Midas macro. NeXtMidas `/NM/` messages are received similar to other X-Midas messages. Since the `MSG_DATA` field matches the string form of an XMValue, it is is possible to do the following in X-Midas 4.6 and later:
        res v:data ^{M.nm_msg_data}
  - - In X-Midas 4.4, working with `MSG_DATA` is a little more difficult. It is necessary to filter out messages which have a table for `MSG_DATA`. Those with a table can be worked with by using `RMSG` to expand the table, for example:
          rmsg T2R ,,,, M.nm_msg_data "TEMP_"
          res TEMP_*
- Example:
      startmacro/nmq=8k
        local /M/
        ...
        nm/on/bg/id=999
        xpipe/setup/controls on
          nm/xs=2 plot/id=7/msgid=XM.1 nxm.sys.dat.world.prm
          ...
        xpipe off
        nm/off
      endmacro

      startcontrols
        label initialentry
          xcontrol/lab=domenu menu item ,, "MACRO;ZoomAfrica,UnZoom"
          xcontrol/lab=getmsg msmon 1 10
          ...
        return

        label domenu
          if item eq 1 then
            message send /NM/ 7 ,, "ZOOM" 0 {XMIN=-20,XMAX=55,YMIN=-40,YMAX=40}
          else
            message send /NM/ 7 ,, "UNZOOM"
          endif
        return

        label getmsg
          message get /M/
          if M.name eqs "NM" then
            say "Got NeXtMidas Message:"
            say "  NAME : ^{M.nm_msg_name}"
            say "  INFO : ^{M.nm_msg_info}"
            say "  DATA : ^{M.nm_msg_data}"
            say "  FID  : ^{M.nm_msg_fid}"
            say "  TID  : ^{M.nm_msg_tid}"
          endif
        return
        ...
      endcontrols
Support for "translated" NeXtMidas messages was added in NeXtMidas 2.7.1. Prior to NeXtMidas 2.7.1 there was minimal support for messaging between existing NeXtMidas primitives (e.g. `PLOT`) and X-Midas.