Previous Next        Current Page: NeXtMidas User's Guide / Macros / Creating a New Macro / Macro Editing
FAQs   
Release Information   
Getting Help   
Basic Concepts   
Result Parameters   
XML Support   
Files   
System Operation   
Macros   
   - Macro Structure and Execution   
   - Messages in Macros   
   - Piping in Macros   
   - Creating a New Macro   
      - Macro Editing   
      - Macro Installation   
      - Macro Example   
   - User Macros   
Applets and WebStart   
Graphics   
X-Midas Interoperability   
Third-Party Compatibility   
Installation and Customization   
Running NeXtMidas Independently   
Glossary   


Macro Editing

Even the best macro writers make mistakes. That's why the BACKSPACE key was invented. The two most common methods of locating a bug within a macro are printing debugging messages and making assertions.

Printing Debugging Messages

Debugging messages print out to the terminal while executing a macro with the /DEBUG switch turned on. Here is an example of a debugging message that you can add after Line 15 in the triangle macro (Macro Example: triangle.mm.) which allows you to see the type value while the macro is running:

if/debug then
   say"type = ^type"
endif

If debugging is turned off (/debug=OFF) this message is not printed.

With this debugging message, a macro writer sees whether a triangle is incorrectly identified as a 45 Deg. Right Triangle which might be the result of a typo in Line 13 (such as using the GT comparison when EQ is correct).

Using Assertions

The ASSERT command makes assertions about variables within the macro. It performs a test and prints out a message indicating whether the test passed or failed. If ASSERT is called with the /DEBUG switch, it only prints out messages if debugging is also turned on in the macro (i.e., the macro is called with the /DEBUG=ON switch).

To test whether lengthA and lengthB values are less than lengthH (as is appropriate for a triangle), try adding these lines after Line 9 in the triangle macro:

assert/debug/text="lengthA< lengthH" lengthA LT lengthH
assert/debug/text="lengthB< lengthH" lengthB LT lengthH

The results of these assertions show whether the computations in Lines 8 and 9 are correct. Anyone running the macro with debugging turned off (/DEBUG=OFF) is unaware this test exists within the macro file.