Macros

General

Macros are key words in a text to send which are being replaced when send. An example is the ! which will be replaced by the station entered in the callsign field. The macros can be used on several places in the program.

Note: Not every macro can be used on all the places mentioned above.

Macros are executed as they are interpreted, i.e. the program replaces all the macros with their values and then sends the cw. In the case of things like {log}, it logs the Q, then
sends the message. This is not a programming language, it's a substitution system.

When placing several macros under a function-key during the sending of it they will be substituted with the contents of the macros.
Example: * will be replaced with your call, so when your call is PA1M a * will be substituted with 4 characters.
Calling a few times another function key with several substitutions in it could bring this up to several 100 characters per function key. To prevent infinite loops the length of the string after substitutions may not exceed 1024 characters. After this length the program will stop substituting. 1024 characters is over 12 lines of text (from 80 characters).

Note: Macros may be in Upper, Lower or Mixed case.  The maximum macro length is 255 characters.

When exporting or importing a macro it can not be longer than 70 characters long and the caption can not be longer than 9 characters wide.

General macros

General macros can be used on all the places mentioned above.

Macro keyword Substituted by
* Call from the Station info dialog, same as {MYCALL}.
! Sends the callsign entered in the callsign field.
@ To voice the current receive frequency. The frequency will be voiced to the nearest 100 Hz dropping .0 if receiving on an even KHz frequency. This capability can be used to avoid having to rerecord CQ messages on 40m split. Example message: wav\{operator}\CQ Listening.wav@wav\{operator}\AndThisFreq.wav
{BEEP} Make a clicking sound from the PC speaker.
{CALL}

Call in callsign textbox or, if none, the last call logged.

Note: This will send the call as it was when the message STARTED.
If you want to be able to type the call and send the changes use ! (exclamation point).
It does not ever send the previous call, however.

{CLUSTER} Cluster callsign from Station info dialog.
See examples.
{Comment} Macro to add string following {Comment} to comment field of current or last QSO.
{END} If you want something to execute after the message is sent, you must precede it with an {END} macro.

The {END} macro signals to the program that the remaining {} commands are to be executed when the program returns from sending the CW, SSB or DIGI messages. Any text to send after the {END} macro is discarded.
# Send next (or last) serial number.
{EXCH} Sent Exchange, either for the last QSO or for the current one, depending on whether there's a callsign in the entry window or call-frame. 
{FREQ} Frequency from the contact in the Entry window
{GRID} Gridsquare from Station info dialog.
{GRIDSQUARE} Gridsquare from grid textbox (contact in Entry window).
{GRIDBEARING} Bearing between own gridsquare and grid textbox (contact in Entry window).
{REVGRIDBEARING} Reverse bearing between own gridsquare and grid textbox (contact in Entry window).
{KMGRIDDISTANCE} Distance in kilometer between own gridsquare and grid textbox (contact in Entry window).
{LOG} CW:Logs the current contact. Same as ENTER in the Entry Window .
Digital: Put the {LOG} macro after the {RX} macro...
Note: does not work in phone (SSB, FM etc)
{LASTCALL}

Call of last station logged.

{LASTEXCH} Exchange of last station logged.   For ROPOCO and LZOPEN only. It does NOT work for other contests !
{MYCALL} My Call from Station info dialog, same as *
{NAME}

Sends the name as entered in the Entry window name field (Example: TARA) or when no Entry window name field, searches the name in the call history table.

{NAMEANDSPACE} Sends the name as entered in the Entry window name field (Example: TARA) or when no Entry window name field, searches the name in the call history table and adds a space behind it.
{OTHERFREQ} Is replaced by the frequency of the non-active radio. Used for passing stations to other bands. Substitutes "R" for decimal on CW.
{PGDN} Change frequency up equal to amount set under 'PgUp/PgDn Incr (kHz)' 'in the Configurer under the 'Other tab'. For use after {END} macro like NA Sprint.
{PGUP} Change frequency down equal to amount set under 'PgUp/PgDn Incr (kHz)' 'in the Configurer under the 'Other tab'. For use after {END} macro like NA Sprint.
{PREVNR} Sends the QSO # of the last logged QSO.
{LRMHZ} Frequency Left Radio/VFO-A in MHz. Example: 28 when on 28.1234 MHz.
{RRMHZ} Frequency Right Radio/VFO-B in MHz. Example: 14 when on 14.1235 MHz.
{RUN} Sends the last logged callsign and then goes into Running mode.
{S&P} Sends the last logged callsign and then goes into S&P mode.
{STEREOOFF} The stereo bit on the LPT port will be set to OFF.
{STEREOON} The stereo bit on the LPT port will be set to ON.
{TIMESTAMP} Date and Time from the contact in the Entry window.
{TX} CW/SSB: when sent in a function key will key ptt. Use Esc to turn off. This is a manual PTT from the keyboard.
RTTY: Check out the Digital macros below.
{CLEARRIT} Reset the RIT to zero. Note: Will only work for radios that support that function. Most ICOM radios do not. Your manual will tell you for sure.
{CTRL-A}
 ...
{CTRL-Z}
Sends Ctrl+A character to TNC.
All characters from the alphabet can be used (A to Z)  ++
See examples.
{ENTER} Sends ENTER to TNC.
{ENTERLF} Sends Return/Line Feed to the TNC.
Try this if ENTER doesn't seem to work.
{ESC} Sends Escape character to TNC.     ++
See examples.
{DATE} Short date in Windows format as set in Regional settings.
{DATE1} Date in Nordlink-TF/WA8DED format (dd.mm.yy)- format: 26.02.99
{SENTRST} Sends the RST sent as entered in Entry window Snt field.
{SENTRSTCUT} Sends the RST sent with the number 9 sent as the character N.
Will send 57N or 5NN etc.
{TIME} Time in Windows format as set in Regional settings.
{TIME1} Time in Nordlink-TF/WA8DED format (hh:mm:ss)- format: 20:36:55
{TIME2} Short GMT time (hhmm)- format: 2036
Information how this macro works in digital contests can be found at: Time2- How it works
{DAYTIME} Date in TAPR DayTime format - format: 0107162036
{DATEGMT} Date and GMT time - format: 16-jul-01 18:36:55
{TIMEGMT} GMT time - format: 18:36:55
{F1} Sends text assigned to function key F1
{F2} Sends text assigned to function key F2
{F3} Sends text assigned to function key F3
{F4} Sends text assigned to function key F4
{F5} Sends text assigned to function key F5
{F6} Sends text assigned to function key F6
{F7} Sends text assigned to function key F7
{F8} Sends text assigned to function key F8
{F9} Sends text assigned to function key F9
{F10} Sends text assigned to function key F10
{F11} Sends text assigned to function key F11
{F12} Sends text assigned to function key F12
{CAT1HEX   radio_hex_command(s)}   

{CAT2HEX   radio_hex_command(s)}

These commands can be used to send commands to radio # 1 or radio # 2 requiring hex data input. The macro name must be followed by the radio hex data and closing terminator   “}”. An example is shown below. There must be two hex characters per byte including zero ( zero entered as 00). Spaces are allowed anywhere in the hex command string to make entry and verification easier. You can not place more than one  CAT1HEX   or   CAT2HEX   command in a macro but the macro can contain one of each command. More than one radio  command can be sent to the radio by placing a character between the radio commands. Spaces are allowed around the “/” character. Multiple radio commands are broken into separate radio commands and sent to the radio using internal command pacing. Depending on the computer speed and the number of commands in the string, the use of these macros may delay the operation of the program when sending of CW or other program operation. There are no precautions which prevent the use of these macros while the radio is transmitting. If the user wants to switch an antenna port safely, use the {ANTRX#TOGGLE} macros which contain a TX inhibit. An example of an Icom command is:

{CAT1HEX  FEFE66E01C0102FD / FEFE66E01C0102FD }

{CAT1ASC radio_ASCII_command(s)}

{CAT2ASC  radio_ASCII_command(s)}

These commands can be used to send commands to radio # 1 or radio # 2 requiring ASCII data input. The macro name must be followed by the radio ASCII data and closing terminator  “}”. An example is shown below. All leading spaces before the radio command portion begins are removed and not sent to the radio. All other spaces in the command are sent to the radio. You can not place more than one  CAT1ASC  or  CAT2ASC  command in a macro but the macro can contain one of each command. More than one radio command can be sent to the radio by either placing a  /  character between the radio commands or by concatenating them together. Spaces before or after the “/” character are sent to the radio. Multiple radio commands using the “/” separator are broken into individual radio commands and sent to the radio using internal command pacing. Non-ASCII characters may be included in the radio command string by delimiting the two character hex value with < >. The leading “<” and trailing “>” characters are not sent to the radio. Spaces are not allowed inside the < > characters. Depending on the computer speed and the number of commands in the string, the use of these macros may delay the operation of the program when sending of CW or other program operation. There are no precautions which prevent the use of these macros while the radio is transmitting. If the user wants to switch an antenna port safely, use the {ANTRX#TOGGLE} macros which contain a TX inhibit. Examples of several forms of this command are:  

 {CAT1ASC PB1;/PB2;}  
 {CAT1ASC PB1;PB2;}
 {CAT1ASC P<42>1;PB2;}
FT2000 - Play  message #1 would be: {CAT1ASC PB01;}

You may place a space between the macro name and the radio CAT command to improve readability. All leading spaces after the CAT1ASC macro command name are removed.

If the ASCII radio command contains characters that are macros (*, !, #), these characters must be sent using the hex notation explained above. As an example, this macro contains a macro character {CAT1ASC *UM0} and will not work correctly.  The correct form using hex notation would be {CAT1ASC <2A>UM0}.

{ANTRX1TOGGLE}

{ANTRX2TOGGLE}

{ANTRX3TOGGLE}

{ANTRX4TOGGLE}
These macros can be used to switch between antenna ports and toggle the receive antenna input on some radios when the program is not transmitting. Some radio models have multiple inputs but lack the CI-V command to control the port so the functionality of these macros is radio dependent. When the {ANTRX#TOGGLE} macro is executed, the numbered antenna port is selected. If the same antenna port macro executed again and the radio is equipped, the receive antenna will be toggled on and off with each macro execution. If the antenna port is switched to another port, the current setting of the RX antenna is stored and used when this antenna is selected again. If only one radio antenna port is used it is only necessary to assign that {ANTRX#TOGGLE} macro to a F-key to toggle the RX antenna on/off quickly.

Supported radios: Yaesu FT950, FTDX9000, FT2000
Icom: IC746, IC746Pro, IC756, IC756Pro, IC756Pro2, IC756Pro3, IC775, IC7700, IC7800 and Elecraft K3, TenTec Orion, Kenwood TS2000
{SOCALLSTACK}  This macro enables single operator callsign stacking. When in RUN mode, this macro gives the operator the ability to stack and retrieve a single callsign when multiple stations are calling. The stacked callsign does not need to be a full call and it can contain a “?”. Single operator call stacking can be used in SO1V/2V or SO2R mode, in both entry windows, and with/without ESM. When in RUN mode, {SOCALLSTACK} will move a call or partial call and place it in the callsign frame and bandmap. If a stacked call exists on the call frame, the callsigns will be exchanged. If the callsign contains a question mark “?”, the cursor will highlight the question mark when the text is popped off the stack. If the callsign does not contain a question mark, the cursor is placed at the beginning of the callsign upon return to the entry window. Using the existing command ALT+D, it is possible to delete a stacked call from the bandmap and call frame without popping it off the stack with when the callsign entry window is blank. {SOCALLSTACK} will also pop the call off the stack if ESM replaced the stacked call with the string CQ-Frequency. When this occurs, the stacked call will be visible in the bandmap.
{SOCALLSTACK} is not intended to be used with the MM call stacking function. See also the macro {STACKANOTHER}
Callsigns stacked by {SOCALLSTACK} can be popped off the stack by pressing the space bar when the CQ-Literal is on the call frame.

More info and examples in the chapter: Advanced functions
{STACKANOTHER}  Macro to stack additional callsigns in all modes. Also check the keycombination CTRL+ALT+G
More info and examples in the chapter: Advanced functions
{LOGTHENPOP} This is a macro intended to be used with the single operator call stacking feature. It logs the current station sending corrections if enabled, pops the next call off the stack, and updates ESM if enabled, to the correct step. The macro can be used with or without ESM. The macro works only in RUN mode. The suggested macro key is:
{LOGTHENPOP} TU NW {F5}{F2}
In CW, if {LOGTHENPOP} can not pop a call off the stack and the logged callsign was changed, send corrected call if enabled and the TU message.
More info and examples in the chapter: Advanced functions
Example fucntionkey setup can be found in the chapter  Functionkeys (CW: example 3)
{TURNROTOR} Turn the rotor to the direction based on the calculated direction.
{STOPROTOR} Stop turning the rotor. Note that per the manual some functions are not supported for all rotor brands.

++ = These macros can not be used in MMTTY and PSK.
The TNC Interface does accept all of the macros above.

Eight of the new commands provide flexibility to send ASCII or HEX commands to either radio in SO2R mode (or VFO in SO2V) mode based on Active or Inactive radio/VFO.

Radio specific commands were added for those SO2R users that do not have identical radios. The new macros follow the same syntax as the existing CAT1HEX and CAT1ASC macros.

The new macros CATA1HEX, CATA2HEX, CATA1ASC, CATA2ASC will send the command to the radio when it is the Active radio.

The new macros CATI1HEX, CATI2HEX, CATI1ASC, CATI2ASC will send the command to the radio when it is the Inactive radio.

The F-key macro text passes through a routine that removes CAT macros for radio(s) that do not qualify based on Active/Inactive radio(s). This allows one F-key string to be used for multiple purposes. An example of a Pro3 macro string that switches DualWatch and the Rx antenna based on the radio activity is shown below.

{catA1hex fefe6ee0 12 00 00fd}{catI1hex fefe6ee0 12 00 01fd}{catA2hex fefe6ee0 07 c0 fd}{catI2hex fefe6ee0 07 c1 fd}

The last macro is the CATDELAY macro. Radio communications are suspended while sending CW and users were unable to send CAT commands to the radio before the CW started. The CATDELAY macro simply delays the start of CW to allow the radio commands to be sent the radio. The form of the CATDELAY macro is {CATDELAY N} where "N" is a user programmable delay in 50ms increments. The value of N is internally limited to 20 (a delay of 1 second).

CW macros

CW macros are only substituted when used in substitutions for CW buttons.  
NB Note taht the ! needs to have a different character in the macro. Use a caret ^ in the macro to send a !

Macro keyword Substituted by
< Increment CW speed with 2 wpm.
See examples.
> Decrement CW speed with 2 wpm.
See examples.
~ Send half space character.
See examples.
[
SK     ...-.-
]
AS      .-...
+
AR     .-.-.
=
BT    -...-
Character
Macro keyword
Substituted by
!
^
..--.
"
"
.-..-.
'
'
.----.
?
?
..--..
/
/
-..-.
:
:
---...
;
;
"-.-.-."
(
(
"-.--."
)
)
"-.--.-"
,
,
"--..--"
- - -....-
Character
Substituted by
É
..-..
Ü
..--
Ä
.-.-
Á
.--.-
Ñ
--.--
Ö
---.
_
.--.-
$
...-..-
@
.--.-.


Tip: Some calls have letter combinations where it's hard for to copy correctly. E.g. 6Y2A is often copied as BY2A. To help make your call easier to copy, Go to Config > Change Packet/CW/SSB/Digital Message Buttons> Change CW Buttons, and try changing the default F1 and/or F4 message where * is used for your call. In this example, 6Y2A changes F4 from * to>6<~Y2A.
Result: the 6 is sent 2 WPM slower compared to the rest of the call, and an additional half space is added between the 6 and Y. Try other combinations of <, >, or ~ to make your call easier to copy.


SSB macros

SSB macros are only substituted when used in substitutions for SSB buttons.
SSB macros can not be concatenated if the result will be two wav files. A combination with the # macro at the first place will work.

Macro keyword Substituted by
{OPERATOR} Specify wav files like: wav\{OPERATOR}\cq.wav
Default to station callsign if not specified.
See examples.

SO2R macros

SO2R macros are only substituted when SO2R is selected.

Macro keyword Substituted by
{JUMPRX}

Change the RX focus to the other input window. If only one input window is shown the second window will be opened.

{WIPE} Wipe the focus window.
{ADVSO2RON} Turn 'Advanced SO2R' on. See chapter 'SO2R'
{ADVSO2ROFF} Turn 'Advanced SO2R' off. See chapter 'SO2R'
{CTRLFx} This macro allows the user to send on the other radio (and is CW only). 
Thus a CW Button might look like:  "tu EXCH{CTRLF9}"
Where F9 on the other radio is set to send a CQ.
It is important to note that via hotkey Ctrl+Shift+L will turn this feature on or off.
When off the CTRLFn macro is ignored.

Multi User macros

Multi User macros are only substituted when in Multi User mode.

Macro keyword Substituted by
{MESSAGE}

Send a message (via function key) to other connected stations over the network. Please check the examples below.

{PASS 0}
...
{PASS 15}
Pass frequency from station 0 (Master station) through station 15.
{PASS 1800}
...
{PASS 28000}
Insert pass frequency for first connected station found on that band. 
(Valid are PASS 1800; 3500; 7000; 14000;21000 and 28000)
{PASSMSG 1}
...
{PASSMSG 15}
Pass  last QSO information from station 0 (Master station) through station 15.

Digital (RTTY and PSK) macros

The following substitutions will be made when sending function key.
In the Digital interface the macros below can be used but also all other macros shown under general macros.

Macros Substituted by
{TX} Starts transmission in the digital interfaces (needed to transmit!)
Needed at thebeginning of every Digital macro!
{RX} Switches to receive in the digital interfaces (needed to get back to receive).
Needed at the end of every Digital macro!
{CLRRX} Clears the RX window. This macro can be used either alone or after an {END} macro.
{SCQ} Macro to be placed at end of TU macro to resume CQ
{GRAB} Grab first callsign from grab callsign window
{DELALL} Delete all entries from grab callsign window
{DELTOP} Delete Top Entry from grab callsign window
{DELSEL} Delete highlighted entry from grab callsign window
_ (Underscore) Sends an idle tone. (Only when using MMTTY)
{FILE:xxxx} Macro to send textfile located in N1MM Logger program directory.  xxxxx is replaced by the name of the text file and the text file needs to be in the logger directory.

The macro works anyplace in a macro string. If the text file only contains one line it does not add CR to end of line. When the text file is multi lined the CR from the last line will be removed so the following text will be on the same line .

Multiple {FILE:xxxx} macros are allowed  in one macro string.
{LDIGFQ} Left Digital Interface Frequency
{RDIGFQ} Right Digital Interface Frequency
{PREVTIME} Will send previously sent time (for ANARTS and BARTG alike contests)
{ALIGN} Move signal into bandpass range. Does the same as Align Buttons on Digital Interfaces  and the PSK Engine.
{PROFILE0} Resets to HAM Default

{PROFILE1}
...
{PROFILE8}

By inserting {PROFILE1} through {PROFILE8} in the function keys
at the start of the CQ or S&P macro's will change MMTTY's profile.
This way it is possible to have one profile for CQing and another one
for S&P or however you want to set them up. (Only when using MMTTY)
{HXXXX} For use with the HAL DXP38. The DXP-38 commands are in the form of Hex that look like $80 $EA. This macro substitution takes the text string in the form of {HXXXX} or {H80EA} and converts this to the appropriate command that should be sent to the TU. See the RTTY chapter for more HAL DXP38 info.
{DI1}
...
{DI24}
Sends texts assigned to the digital macro keys DI-1 to DI-24 on the Digital Interface.
{LOGTHENGRAB} This will log the current contact and Grab the top callsign that is in the grab window of the DI. Will only work in Run Mode.
{DIGQTCR}
{DIGQTCS}
WAE contest: Macro to open Digital QTC Recieve window.
WAE contest: Macro to open Digital QTC Send window.

Some Remarks:

It is best to add the command that your TNC uses to clear the transmit buffer to the end of your Abort Macro. If not, the transmit buffer still holds the remaining characters that were left in the sent string and will get sent the next time the TNC sends.

Packet/Telnet macros

Packet/Telnet macros are only substituted when used in the packet/telnet buttons.

Macro keyword Substituted by
{WAIT} Wait 5 seconds (fixed value)

Macro examples

CW macro examples

SSB macro examples

RTTY and PSK macro examples

Packet macro examples

{MESSAGE} macro example

The {MESSAGE} macro sends a message (via a functionkey) to other connected stations over the network. The info will be shown in big red letters in the Info window from the receiving station(s). Place a number directly after the {MESSAGE} macro  if you want to send the message to one specific station. If you don't want to send to a specific station, but want to start your message with a number put "- " in front of the message. Because "*" is used by macro substitution to indicate a callsign, you cannot put a * a the beginning of a message to indicate that the message should be sent to all stations. Since sending to all stations is the default behavior, this is not a problem. Just don't start the message with a number if you want to send the message to all stations.

Button text Macro
F8 Pass station

{MESSAGE}2 {TIMEGMT} {PASS 1} {CALL} {GRIDSQUARE} {GRIDBEARING}deg. {KMGRIDDISTANCE} km.

Message sent to station 2 with info about the station in the callsign field.
This is a macro which could be used in VHFREG1 where a station is send from one band to another.

F8 Pass station

{MESSAGE} {TIMEGMT} {PASS 1} {CALL} {GRIDSQUARE} {GRIDBEARING}deg. {KMGRIDDISTANCE} km.

Message sent to all connected stations with info about the station in the callsign field.

F8 OK

{MESSAGE}2 OK

Sent OK to station 2

{END} macro examples

The {END} macro signals to the program that the remaining {} commands are to be executed when the program returns from sending the CW, SSB or DIGI messages (this may not yet work for digi). Here is an example:

F1:  {STEREOOFF}CQ TEST *{END}{STEREOON}

Whenever the F1 key is pressed, the stereo bit on the LPT port will be set to OFF.  CQ will be sent via the current mode, and after the message is complete, the stereo bit on the LPT port will be turned back on.  Thus, one can listen to just the second radio while the CQ is being sent, then listen to both radios after it is finished.
Note: Only {} macros with side effects are used when they are placed after the {END} macro. I.e. if you put {MYCALL} or "5NN" after the {END} macro, they will be ignored.  Why?  well the message is over, there is nothing more to send.

So the rule is: All macros with side effects are executed before the message is sent, except for those that appear after the {END} macro.

So where could this lead?  Well, what if I created a radio control macro? That is, a macro where you could define commands for your particular radio. The syntax would be something like {R1 cmd}.  "cmd" would be replaced with user settable, radio specific commands, like are used with the bandwidth functions accessible from the bandmap.  Using the Orion as an example, a macro could be set up like this:

F1:   {R1 *UM0}CQ TEST *{END}{R1 *UM85}

This would set radio 1's (an Orion) volume to zero at the beginning of a cq, then back to 85 at the end of the cq.  This is equivalent to turning off monitor just for CQ's.   The possibilities are pretty interesting. (There would also be an {R2} macro for SO2R.)

This could lead to controlling RX mute/unmute, monitor on/off, frequency QSY ala NA Sprint rule, possibly letting keyboard entry and or transmit focus follow the moving VFO etc.