2.3.1.5 Macros
Definition of the Macros
The command syntax,
define macroName {script}
defines a macro called macroName, and associates it with the given script. MacroName can then be used like a command, and invokes the given script.
For example, the following script defines a macro that uses a loop to print a text string three times.
def hello { loop (ii, 1, 3) { type "$(ii). Hello World"; } };
Once the hello macro is defined, typing the word hello in the Script window results in the printout:
1. Hello World
2. Hello World
3. Hello World
Once a macro is defined, you can also see the script associated with it by typing
define macroName;
Passing Arguments to Macros
Macros can take up to five arguments. The %1-%5 syntax is used within the macro to access the value of each argument. A macro can accept a number, string, variable, dataset, function, or script as an argument. Passing arguments to a macro is similar to passing arguments to a script.
If arguments are passed to a macro, the macro can report the number of arguments using the macro.nArg object property.
For example, the following script defines a macro named myDouble that expects a single numeric argument. The given argument is then multiplied by 2, and the result is printed.
def myDouble { type "$(%1 * 2)"; };
If you define this macro and then type the following in the Script window:
myDouble 5
Origin outputs the result to the Script Window:
10
You could modify this macro to take two arguments:
def myDouble { type "$(%1 * %2)"; };
Now, if you type the following in the Script window:
myDouble 5 4
Origin outputs:
20
Macro Property
The macro object contains one property which stores the number of arguments passed to the macro.
| Property | Access | Description |
|---|---|---|
| Macro.nArg | Read only, numeric | This property stores the number of arguments passed to the macro. |
For example:
The following script defines a macro called TypeArgs. If three arguments are passed to the TypeArgs macro, the macro types the three arguments to the Script window.
Def TypeArgs { if (macro.narg != 3) { type "Error! You must pass 3 arguments!"; } else { type "The first argument passed was %1."; type "The second argument passed was %2."; type "The third argument passed was %3."; } };
If you define the TypeArgs macro as in the example, and then type the following in the Script window:
TypeArgs One;
Origin returns the following to the Script window:
Error! You must pass 3 arguments!
If you define the TypeArgs macro as in the example, and then type the following in the Script window:
TypeArgs One (This is argument Two) Three;
Origin returns the following to the Script window:
The first argument passed was One. The second argument passed was This is argument Two. The third argument passed was Three.