### Macro Structure and Execution

Here is the basic structure of a NeXtMidas macro:

    ! This macro takes a name argument that defaults to "SUPERMAN" if
    ! not provided and displays a greeting message to the named person
    startmacro s:name[Superman]
      ! This is another comment
      say "Hello there ^{name}!"
      ...
    endmacro

    procedure processMessage m:msg
      say "msg.name ^msg.name, data ^msg.data"
      ...
    return

    procedure processException m:emsg
     ...
    return

The first line defines the parameters supplied at run-time. Defaults can be given for unconfigured macros by putting the default values in square brackets immediately after the parameter name (no spaces), configured macros specify their defaults in the command dictionary (see `UPDATE`), an entry in the command dictionary overrides any default given at the top of the macro.

By default, all results created by a macro have local scope only. They are not accessible by other macros and are automatically destroyed at macro completion. Global results are always available for read access. To make global results writable by a macro, it must be called out using the `GLOBAL` statement.

The `processMessage` is automatically sent any messages passed to the macro. Optionally `processException` can be used to override the default exception handling (this is extremely rare).

Configured macros are invoked just like any other command (name followed by the macro arguments). If the macro is a user macro, you must always begin the name with the percent sign (`%`). Execution then proceeds through each statement between `STARTMACRO` and `ENDMACRO`. To see the constituent macro statements as they execute, type `VERIFY ON` before running the macro. When the macro completes, it returns to the NeXtMidas prompt.