Omni Systems, Inc. |  | Mif2Go User's Guide, Version 55 |  |  |  |  |

> 28 Working with macros > 28.3 Using macro variables > 28.3.2 Assigning values to macro variables

### 28.3.2 Assigning values to macro variables

You can initialize the value of a macro variable in your configuration file, and you can assign a value to a macro variable in the body of a macro definition:

Assign a starting value

Assign a value in a macro

Assign a character literal.

Assign a starting value

Assign starting values to macro variables in configuration section [MacroVariables]. Omit the leading $$ when you specify the name. For example:

[MacroVariables]

; varname = value to use as literal replacement, can be in Macro Ini

; can also be set in any macro with <$$name=value>, settings persist

; until the end of the file, but are not stored in the .ini file.

HdgCount = 000

HdgColor = blue

You can assign only literal values; you cannot assign a value that specifies a macro or another macro variable.

Place section [MacroVariables] in one (or more) of the following files, after any macro definitions:

• your project configuration file

• a configuration template

• a separate macro file or macro library file.

Assign a value in a macro

Use any of the following forms to assign values to variables inside Mif2Go macros:

<$$varname = $$othername>

<$$varname = (expr)> (See §28.6 Using expressions in macros)

<$$varname = "quoted string even with \"double quotes\" in it">

<$$varname = 'quoted string using "single" quotes'>

<$$varname = string with no quotes>

<$$varname = 'x'> (Character literal)

Assign a character literal

The value of a character literal assigned to a macro variable is the ASCII value of the character. A character literal can be a character enclosed in single quotes, or any of the special cases listed in Table 28-2.

Table 28-2 Character literals for macro variables

Character literal | Name | Decimal ASCII value
'\r' | return | 13
'\n' | newline | 10
'' | empty | 0
\' | single quote | 39
\\ | backslash | 92

Characters other than ' and \ that are preceded by a backslash are themselves. However, ' and \, without a backslash, are not themselves:

''' | would be an empty string followed by an out-of-place ', thus 0 (zero)
'\' | is invalid, and would probably become a string with a single quote, equivalent to "\'"

When a string between single quotes contains more than two characters (or more than one when the first character is not a backslash), you do not have to escape double quotes within the string, a common JavaScript and HTML technique.

Display an assignment

Assigning a value to a macro variable does not cause the value to appear in output. To display the value of an assignment, use as and a printf() format. For example, if the value of <$$myvar> is 0 (zero), the following expression displays the value 0001:

<$$myvar = ($$myvar + 1) as %0.4d>

See §28.6.3 Displaying expression results in output.

Assign a value indirectly

You can assign a value to a variable indirectly:

<$$myvar = "$$other">

<*$$myvar = 10>

This sequence results in assigning the value 10 to $$other rather than to $$myvar. See §28.6.7 Using indirection in expressions.

Nest macro variables

You can nest macro variables:

[Macros]

; MacroVarNesting = Yes (default, vars contain <>)

; or No (first > ends var)

MacroVarNesting=Yes

This setting is provided solely to support old syntax in assignments. You used to use:

<$$myvar=<$$othervar>>

to get what is now simply:

<$$myvar = $$othervar>

You need MacroVarNesting=Yes only if your macro variable assignments use the old syntax; the new syntax is always valid. Either way, you get the contents of the referenced right-hand variable, rather than its name.

Note: Macro variables cannot contain macros.

See also:

§28.4.2 Assigning a value to a list-variable item

§33.2.4 Assigning values to configuration variables

> 28 Working with macros > 28.3 Using macro variables > 28.3.2 Assigning values to macro variables

| Mif2Go User's Guide: 28.3.1.3 Invoking a macro variable |  | Mif2Go User's Guide: 28.3.3 Incrementing and decrementing macro variables |