(C) 2001, 2002, 2003 - Rein Couperus, PA0RCT

a free console mode general purpose CW keyer,
logging and contest program for hamradio
under LINUX

This program is published under GPL





TLF-0.8.16 is a console (ncurses) mode general purpose CW keyer, -logging and -contest program for hamradio. It supports the CQWW, the WPX, the ARRL-DX , the ARRL-FD, the PACC and the EU SPRINT contests (single operator) as well as a lot more basic contests, general QSO and DXpedition mode. It interfaces with a morse code generator, a number of radios, and with a DX Cluster. Tlf can project cluster data into the excellent Xplanet program, written by Hari Nair.
Contest operation mimics the popular TR-Log program for DOS, the output file is TR- as well as CABRILLO compatible. The user interface was designed with over 30 years of experience in CW contesting in mind. The program was written for console mode on purpose, to make it run also on smaller machines, or remotely via a modem link. TLF is developed under Slackware 8.0, and tested under SuSE 7.0, kernel version 2.2.16, and RH 7.2, with 2.4 kernel.. Beta testers welcome !!!

There is now also a two-floppy version in development called debianham. That version is maintained by the Debian community, and contains a Linux mini-distribution and a copy of tlf.

Three keyer modules are now supported. The cwkeyer from Ivo, 9A3TY with output on either ttyS0 or ttyS1, and the (more flexible) cwkeyer for the parallel port from Eric, PA3FKN with output on LP0. They both work with a cw output device called /dev/cwkeyer, and can be fully controlled by TLF.

Since tlf-0.7.4 the cwdaemon-0.2.0 is fully supported, featuring direct mode for the keyboard.

Starting with version cwserialkeyer-0.1.5 the serial keyer compiles with all kernels (including 2.4.x).

From version 0.7.0 onwards, tlf works with Hamlib-1.1.3. The latest CVS includes "rit clear" for icom rigs (and for the OMNI 6), you find it at

This version, 0.8.16 provides full ip networking between tlf nodes, syncing/distributing log, packet data, frequency data, local talk, serial numbers, time sync etc...

Back to contents


I have been using mostly TR-Log for contesting, or CT when working as guest op in M/S operations. I am especially fond of TR-Log. When you have a DOS computer, you don't need TLF. You should use TR-log. However, I have now removed all WINDOWS and DOS software from my computers and put LINUX on. This means I can't use my favourite contesting software anymore (yes, I have also experimented with DOSEMU, but without great success...)

TLF started as a simple keyboard interface to cwkeyer-0.1 from 9A3TY. When the WPX 2001 was 2 months away I had to try to write my own program. That turned out to be great fun. The result of this is TLF, which very much represents my idea of what a CW contest program should do.

Some have asked what the name stands for. The old hands from the days when CW was still hand-crafted will certainly know. It means Try Left Foot.
On special request TLF will now also log SSB and DIGIMODE qso's.
Back to contents


Permanent information displays:
  • Keyer output,
  • last 5 log lines,
  • UTC time,
  • keyer speed, delay,
  • keyer status
  • (Keyboard|CQ|S&P|Auto),
  • DX database output for active call,
  • or WWV data if available via packet.

Optional information windows:

  • Dupe check,
  • score,
  • raw cluster output | DX spots only | Band Map,
  • Check partial call with a database of some 28.000 known contest calls,
  • Zones worked,
  • Countries worked
  • Propagation diagrams based on:
    • sun spots,
    • qrb,
    • B>sunup,
    • sundown,
    qtr, etc.



Uses reformatted cty.dat.
Conversion script is included in the distribution.


TLF interfaces to the keyers through the file system (/dev/cwkeyer) or through ip networking (cwdaemon)

For CW output through the serial port keyer it writes to /dev/cwkeyer.
Interface to the radios has been kept modular, since tlf-0.7.0 the hamlib library is supported, which enables control of various popular rigs.

Tlf is now fully networked, with an extremely simple setup procedure... You have to see it to believe it..!

HW Interface to the trx:

 /* cwdaemon & PA3FKN parallel port keyer circuitry:

                                        ----o  CW out to TRX
                                       | C
                         1k       B | /
   SELECT IN      o----/\/\/\-------|/      BC547, 2N2222
   (pin 17)                         |\
				       | E
   STROBE         o--------------------
   (pin 1)

   GROUND         o------------------------o  GROUND
   (pin 18)

  Back to contents 


Install the CW driver

You now have a choice out of two kernel modules and a user mode daemon, depending whether you want to use output on a tty (serial) port or on LP0, the parallel port.

I prefer the cwdaemon, because of the direct mode keyboard.

Your choice of keyer depends on what you want:
DriverOutputPaddle inputPTTMode
Cwserialkeyer kernel driverttyS0 or ttyS1nonoword mode
PA3FKN parallel port kernel driverlp0yesyesword mode
user mode cwdaemonlp0nonodirect mode

Installation of the parallel port kernel driver of PA3FKN

Get Cwkeyer.tgz from the TLF website and get it to work . Just unzip and untar the file cwkeyer.tgz, go into its directory and make. Start the module with "load", and stop it with "unload". You have to be root to do this !   (TLF can be run as user).
Key output is on bit 3 and PTT output is on bit 2 of the parallel port.

Installation of the serial port driver of 9A3TY

Get Cwserialkeyer-0.1.5 (based on cwkeyer-0.1 from 9A3TY) ( and get it to work (as root).
You need the special version from the TLF website, because it will allow you to change the cw speed in 2 wpm increments. Moreover it will allow stopping the message as soon as it has started. The original module can not do this (yet).

The README file in the distribution (cwserialkeyer-0.1.5.tar.gz) gives excellent directions for the installation. As from version 0.1.5, and tlf version 0.6.0, the cwkeyset program is not necessary any more, as the module is now controlled via IOCTL inside tlf.
The TLF distribution contains a script, startcw to start the module. Edit it first to use the right directory names and output port (ttyS0 or ttyS1).
If you have problems, first check if all file permissions are o.k.

Output is on the DTR pin of the port.

You can use the same simple hardware interface as for TR , CT or DX4WIN.

Example of my own startcw script which will start the cw kernel module on ttyS1:

#! /bin/bash
# starts the cw driver

cd /home/rein/cwserialkeyer-0.1.5
make cwup2
echo "CW OK" > /dev/cwkeyer

Installation of the user mode cwdaemon networked keyer

Install the daemon into /usr/bin and start as root (at system boot time).
The cwdaemon is a network keyer, which means it can sit anywhere on your LAN (or on the internet), supposed you have networking software installed. The cwdaemon uses the udp protocol. The default udp port is 6789. If that port is already in use you can set another port by just starting the daemon with e.g. cwdaemon 6888

Install the Hamlib library

- Get the Hamlib 1.1.3 library (there is a copy on the tlf ftp site)
- Unzip and untar the archive
- Go into the top directory
- As root, do ./configure, make, and make install. - As root, do ldconfig (the libraries are in /usr/local/lib) .

Install the TLF program.

Get the latest distribution of tlf from the download site (
tlf now supports GNU autoconf and automake, which automates the installation process, and makes sure you have all the goodies on your machine which tlf needs..

You have to be root to install tlf.
* Untar the archive (e.g. tar zxvf tlf-0.8.16.tar.gz)
* cd into the top directory (cd tlf-0.8.16)
* type ./configure (if you want to use hamlib, type ./configure --enable-hamlib, install hamlib first...)
* type make
* type make install

It is good practise to use separate directories for the different contests.
TLF can be started from any directory. to start a specific contest you need to:

* mkdir contestname
* copy the logcfg.dat file for that specific contest into it (it is located at /usr/local/share/tlf/logcfg.dat)
* edit the logcfg.dat file (call, logfile, mults. points) to suit your needs
* start tlf with tlf

You can convert the latest cty.dat file into ctydb.dat if necessary with the script provided (convertctydb).
The cty.dat file included in the distribution is the one from October 2002.

TLF needs some bash commands to work: less, joe..

Back to contents


    Make sure the CW kernel module or the cwdaemon (as root) runs before starting tlf if you want to use the keyer....
    Start the program (tlf).


. / clfile This is the input FIFO for the DX cluster monitor. You only need it when you use a dx cluster, or any other information you want the program to display, and if you cannot use ttyS0 or ttyS1 (e.g. you have only 1 serial port, which is used for rig ctrl).
There are several ways to get the cluster data into it.
You can use the "call" ax25 tool. .
You can get the info into clfile by starting call with:
 call -r packetinterface | tee tlfworkingdirectory/clfile

You can also use telnet. Open a new terminal in the working directory, and start telnet with:
telnet node | tee -a clfile

TLF will pick it up from there (it will look in the working directory for clfile!!).

TLF now also has its own comfortable telnet client and tnc terminal !!You have to set the proper parameters for this in the logcfg.dat file.

Note:When your tlf node wants to receive packet date via the LAN, from another tlf node, the FIFO must also be active.... For this purpose you must set FIFO_INTERFACE in the logcfg.dat file!
. / ctydb.dat This is the DXCC database. It resides in /usr/local/share/tlf.
. / .paras The parameter file. It remembers the parameters for the next session. TLF will generate one for you. It is normally not necessary to touch this, as all parameters are included in the file logcfg.dat, which can be edited within tlf.
. / logcfg.datThe configuration file. It enables you to configure tlf for a special contest, for normal qso operation, etc. All parameters are already in the file. They are enabled by uncommenting them (erase the # in the first position of the line). You should stick to the format as much as possible. In case certain parameters are mutually exclusive, the last one wins....
As more functions become available in future, new versions of logcfg.dat will become available.
xxxxxxxxxxxxxxx.log The log file. You name it!
. / cabrillo This file will be generated by the ":write" command after the contest. Rename to YOURCALL.CBR and email....
Back to contents


CT compatibility mode

CT compatibility has been added to tlf in order to make it easier for those who have been working with CT a lot as guest operators during M/S or M/M operations.
Two things have been added to tlf to accomplish this: The CT compatible commands are active all the time, they are just aliases for existing tlf commands.

By setting the CTCOMPATIBLE parameter in logcfg.dat logging in tlf will behave like CT instaead of TR. This means that: The log file of tlf is TR compatible, also in CT compatibility mode. Back to contents

Logging qso's

All activity takes place in the call input field (and the exchange input field..).
When you enter (part of) a call, several things happen:
Back to contents

QSO B4 message

Tlf will automatically generate an qso b4 message in case you try to work a dupe. This message is taken from message F7. If you want to work the dupes anyway set NOB4 in logcfg.dat !!

Back to contents

Deleting qso's

Using the "-" key will delete the last qso from the log (after asking your permission of course).

Editing the 5 previous qso's

You can edit the 5 previous qso's with "Up-arrow". This qso editor is using overwrite mode. Use the cursor keys to navigate, and leave edit mode with enter, tab or escape.
You can use Insert and Delete. If you use "up-arrow" in the first line you go into LOG VIEW mode.
During edit mode LAN messages are kept in a buffer.
Back to contents

Changing RST

You can change RST sent when a Call is in the Call Input Field. Page_down will lower the S value and Page_up will increase it.

RST received can be changed by going into the exchange field and using Page_down and Page_up accordingly.

Back to contents

Changing CW/SSB mode

The commands are :MODe, :CWMode, :SSBmode and :DIGimode .

Changing Bands

When you are in the call input field, use the left_arrow and right_arrow keys to change the band.
When contest mode is on, only the contest bands can be reached (160-80-40-20-15-10).

For the WARC bands set CONTEST=qso and uncomment CONTEST_MODE in logcfg.dat

If a radio interface is present, band switching can be done in several ways: Back to contents

Contest commands

Some special commands are needed for use in a contest: Back to contents

Keyer commands

The keyers only work in word-mode. The new parallel port cwdaemon also supports direct mode

Back to contents

Radio control commands

A Radio Control Interface is available for a growing number of rigs.
The development is done by the active Hamlib group. Info about rig compatibility is available on:

Back to contents

Log commands

Back to contents

Change your time zone and location

Set parameter TIME_OFFSET in logcfg.dat when your computer clock does not run on UTC. The parameter can have any value between -23 and 23.

Edit the ctydb.dat file, and put the data of your qth into the line representing your country. An example:
United States:            05:  08:  NA:   43.00:    87.90:     5.0:  K:
If you are in zone 04, change the 05: into 04:, change the 43.00 and the 87.90 into your location. and the 5.0 (time difference to GMT) at the end to 6.0

This will enable tlf to show the DX time of a station you are working.
Tlf is picky with respect to the exact format of the file; make sure the stuff is in the right columns!

When there is a TIME_MASTER on the network, the tlf clock will be synchronized with the master.
To designate a station as a time master, just set TIME_MASTER in logcfg.dat.

Back to contents

The score window

The score window is adapted to the contest you are in. So if the contest parameter is set to cqww, you get a special score window for it, showing qso's per band, countries worked per band, zones worked per band and total score.
It also gives an indication of the qso's per multiplier, and the qso rate based on the last 10 qso's.
When you restart the program the score is recalculated from the log file. When a qso is deleted from the logfile the score is not adjusted, neither is the list of counties worked updated. You can correct this by restarting the program.
At the bottom of the window you will see the QSO's/MULT display, and the RATE (qso's per hour, based on the last 10 qso's).

Back to contents

The Messages

There are 24 messages. More than I can remember. Some have a special use:
For the messages you can use a number of special characters:

The easiest way to handle the messages is to edit them in logcfg.dat. You can then keep separate logcfg.dat files for different contests and operating situations.
You can list the messages with ":list" and change them with ":message".
Back to contents

Dupe checking

With the ":check" command you can open a search window which will tell you:
Back to contents

Intelligent exchange input check

In the arrl sweepstakes contest e.g. the exchange is SERIAL-PRECEDENCE-CHECK-SECTION.
Tlf enables you to input these items in almost any order, like 12A 87ORG or ORG 12 87 A. If you set CALLUPDATE in logcfg.dat, the call in the call input field will be updated also. (needs blanks on both sides, works for US/CANADA only...). The lowest line in the check window shows if tlf has recognized the right ingredients.
If no section is present in the exchange, tlf will ask for it before logging the qso.
This needs some experimenting before the contest to get acquainted with this feature.

Back to contents

Check partials / auto_complete

The check partials function is controlled via the logcfg.dat file with 3 parameters:

The check partial calls function uses a database derived from the master.dta file containing some 25.000 known contest calls.
When the USEPARTIALS parameter is on, tlf will complete the call as soon as it is unique in the database.
This can of course lead to strange effects, but in my experience there are far more hits than misses. Sometimes you must edit the call because it has locked on a unique call.... Try it, and switch it off when you don't like it.
Some people find that 9 calls is not enough.... MANY_CALLS will give you many calls.

Back to contents

Checking propagation

The propagation screen is invoked with ctrl-p.
The calculation actually uses the SSN value which is derived from SFI. If you are connected to a cluster, the WWV values will automatically be stored, and the last value used. Clfile is periodically checked for this, and the value stored in wwvfile.
Starting with version 0.4.4 it is now possible to include the value of R or SFI in the logcfg.dat file.
The value will be picked up within a minute, and will be used for subsequent calculations. The calculations are quite simple, but you may compare it to e.g. minprop 3. and see that it really comes quite close. This may be enhanced in the future, to influence the multiplier map...
All timing is related to UTC.
Back to contents

DX cluster connection

From version 0.6.1 onward, tlf has three methods to connect to a DX Cluster:

You get to the packet terminal with :pac.

Telnet internet connection

To enable the telnet interface set the following commands in logcfg.dat:
TELNETHOST=internet address
TELNETPORT=8000 (most of the time)

e.g. the following lines to connect to port 8000:


TNC or Modem connection

To enable the serial terminal interface set the following command in logcfg.dat:
TNCPORT=0 for ttyS0 or
#TNCPORT=1 for ttyS1
TNC_SPEED=2400 (the default is 2400 Bd)

This will open ttyS0 for packet at 2400 Bd

Terminal operation

The terminal commands are:
FIFO connection via the file system

To enable the filesystem interface set the following command in logcfg.dat:

Tlf then regularly looks into a fifo called "clfile" in its working directory. It is your responsibility to get the info into it. Some examples:

Relevant commands:

Spots younger than 10 minutes are marked!!
Double spots are sorted out...

The bandmap sorts the frequencies and flags the ones you don.t need (yellow).
You can also switch this display to NEEDED,
so you will see only those countries you still have to work!!

You can use Hari Nair's Xplanet program to show the spots in their location on the globe. To show azimuthal projection centred on Eersel the Netherlands you start Xplanet with:
xlanetbg -wait 10 -window -geometry 300x300 -markers -markerfile /home/rein/tlf/test/tlfmarkers
-projection azimuthal -longitude 5 -latitude 51
(see the xplanet documentation for an explanation).
set the following line in logcfg.dat:
to show the calls spotted on the cluster (your directory may vary, here it is the directory you run tlf from....)
The display will now update every 10 seconds...

Back to contents

LAN connection (M/S and M/M operation)

The tlf  network interface uses the udp/ip protocol. It can handle as many nodes as the network bandwidth supports, but is limited to 8 nodes at present. (Address space is 64, so recompilation with MAXNODES=64 will handle 64 nodes).

The udp protocol is used for minimum protocol overhead. Tests with several tlf nodes have shown that using the tcp protocol does not cure a network problem, it just adds protocol overhead. The tlf protocol uses short messages, which will not exceed the limit where fragmentation sets in. (udp buffer length is 256 bytes).

Each node has 1 receiver on udp port 6788, and sends the data it generates to the destination nodes. The list of destination nodes is defined in logcfg.dat of every node.

The message format is very simple: < THISNODE > < MESSAGE TYPE > < string...>

THISNODE is a character(A to H) and message type is also a character (1 to 9).

TLF network functions

The following message types presently exist:
1Log data
2Packet data from cluster
3Add spot data to bandmap ("DX de TLF: ...")
4Frequency data
5 Talk data
6Present serial number
7Present utc time

Log data
Every tlf node has a copy of the complete log database. This has several advantages.
First, having the log at several places in the network reduces the risk of loosing it...
Second, it allows using the full power of the log search function (exchange recall and multiplier search).

Packet data
Packet data is available on all nodes, enabling quick spot access. This also means that only one node needs a packet connection...

Add spot data
Enables local spotting and bandmap preload from any node on the network, even remotely on the internet...

Frequency data
Every 30 seconds the node broadcasts its operating frequency (if trx control with Hamlib is used), or the band it is on. This greatly  simplifies passing mults to a different band !! A display window shows what qrg the nodes are working...(:FRE or ALt-J)

Here you see that station A is on 7010 kHz and Station C (no trx control) is on 20 meters.

Talk data

By just typing
Alt-g please 2 beers for 80 meters
,  this message is broadcast to all nodes on the list. A display window shows the last 5 messages received... (with ctrl-t or Alt-g)

Present serial number

Used when a serial number is used for the exchange (EXCHANGE_SERIAL is set in logcfg.dat), e.g. in the wpx contest. As soon as a serial number is sent, it is blocked on the other nodes.... This bridges the time between sending the exchange and actually  logging the qso, mostly preventing that serial numbers are given out twice!!

Present utc time

When TIME_MASTER is set in logcfg.dat the station broadcasts the actual utc time to the other nodes.
When you do this, the other tlf nodes will use this time. The time receive function has a smoothing filter, so one wrong number will not kick the node out of sync.

Setup for the LAN functions

To use networking with tlf is not difficult.

First step is to provide ip connectivity between the nodes that you want to communicate with. It is not important whether you use an ethernet link, ppp, or whatever. In my shack I use a 10 Mbit coax ethernet, with a ppp bridge to the house via a 56k modem. This allows me to remote control the OMNI from the living room...
For tlf, the word is: "if you can ping it, it will communicate".

There is one thing to remember: there must be connectivity for port number 6788. So if there is a firewall between two tlf sites, make sure it passes traffic to port 6788. (Just in case you would want to include the internet in your routing...)

Second step: Provide a short form unique address for the node, so tlf can see which node generated the data. For brevity this address is a character from A...H (for an address space of 8 nodes).

Third: Edit logcfg.dat for each node. The only data tlf needs are the short form address of its node, and the ip addresses (the addresses you use for the ping) of the nodes it wants to communicate with.
You can optionally suppress the logging function, e.g. for nodes  which only provide spots for the bandmap...
During the communication setup phase it is possible to write a logfile (debuglog) of all messages the node receives to disk.


To receive packet information from the network, the FIFO input should be activated.

That's all....

switch the debug file on with:


With :info you get a screen showing the node addresses, packets received, packets sent, and number of send errors per node. A send error occurs when a node cannot be reached, e.g. if tlf is not yet running on it.

If you set the LAN_DEBUG command in logcfg.dat you get a dump called "debuglog" in your working directory, showing all raw messages received on this node.

Back to contents

Editing the .paras file

Here is an example of a .paras file. Normally, you should not have to edit it, all can be changed from within the program.

Example of a typical .paras file (cqww contest):

# Call ----------------------------------
# Messages F1...F12 ---------------------
CQ % K
@ DE %
@ ++++++[------ 14
TEST % %
# TU message S&P mode---------------------
TU [14
# TU message CQ mode---------------------
TU %
# Info for top status line----------------
1=CQ 2=DE 3=RST 4=73 5=HIS 6=MY 7=B4 8=AGN 9=?
# Logfile----------------
# Contest-----------------------
# Parameters--don't change----

Working with the CW simulator

The CW simulator is switched on with ":sim".
Set the contest to CQWW (CONTEST=cqww in logcfg.dat)
After your CQ with F1 the run begins. If it stops, call cq again.

The simulator is meant to work in TRlog mode. It uses the PC speaker for output. This means you can not switch off the speaker with :TONE in simulator mode!

Back to contents

Making a contest qso in CQ Mode (TRlog compatible)

1: Press ENTER to start the F12 message ("CQ TEST YOURCALL...") or F1
HC8N: "HC8N"
2: Type HC8N
3: Press ENTER (YOU: "HC8N 5NN14") (message is in F3)
4: Press ENTER (YOU: "TU YOURCALL") (message in CQ_MESSAGE)
2: type K7RAT
3: Press ENTER

Back to contents

Using the keyer
the keyer is started with Ctrl-K or with "," (comma). The comma will only work when the call input field is empty (and if trxmode is CW of course.
The following special cw characters are supported on the serial interface: The keyboard works in word mode, enabling you to correct a word with "backspace" before it is sent to the keyer by adding either a space or enter.. Characters like SN, SK, BK are sent immediately. Stop the keyboard with ESCAPE.

The cwdaemon features direct mode, so every character ist sent to the keyer immediately...

Back to contents

Making a contest qso in S&P Mode

1: find a station to call
2: Type HC8N to enter the call into the input field
3: Press ENTER (YOU: "YOURCALL") or F1
4: Press ENTER (YOU: "TU 5NN14") (the message is in SP_MESSAGE)

Back to contents

Making a normal qso

- Switch contest mode off
- Use the check window to see if you have worked the stn. before, and
to remember his/her name :-))
- Tab into the exchange field for comments (name, qth)
- Use ; (notes) for further comments
- Reprogram the key saying SRI QSO B4 to contain the local WX.
- Use , (keyboard) to tell your story, nice and slowly...

Back to contents

Command Overview

Most commands start with a ":", and you need to type only the first 3 characters.

:help Alt-HShow online help
:modeswitch trx mode (CW, SSB, DIG)
:CWModeswitch trx mode (CW)
:SSBswitch trx mode (SSB)
:DIGswitch trx mode (DIGIMODE)
:setlist and set parameters.

the following contests are supported (many more possible):
  • CQWW
  • WPX
  • ARRL-DX (both sides)
  • PACC (both sides)
  • NRAU
  • EU HF Championship
  • R1 Field day
  • ARRL Field day
  • Other (wysiwyg mults)
  • DX-pedition
  • General qso
Alt-VUp-Arrow: Increase CW speed (3wpm)
Down-Arrow: Decrease CW speed (3wpm)
Pg-up If call field empty:
    Increase Auto_CQ delay (1 sec)
If not empty:
    increase RST
Pg-down If call field empty:
    Decrease Auto_CQ delay (1 sec)
If not empty:
    decrease RST
F12 Start Auto_CQ
F1-F11 Send CW message
:tone Set sidetone frequency (200-900 Hz) or OFF (0)
A value between 2 and 20 will add weight to the cw elements
Tab Switch between call input and exchange fields
+ Toggle CQ/S&P mode
+ Send F3 + log qso
:SIM Toggle CW simulator (run) mode (TR only)
Left-Arrow Change band if callsign field empty
(enter edit mode if callsign present, leave edit mode with ENTER or ESC)
Right-Arrow Change band
ENTERSmart key for contest mode
    Calls cq
    Calls station
    Sends exchange
    Logs the qso
\ENTERlog qso w/o CW;
; Alt-N Insert note in log
Alt-K Keyboard on. This works only when the call input field is empty. use ctrl-k if it isn't.
ESCAPE Return to call input field
    keyboard off
    stop cw
    reset call and exchange
Ctlr-pPropagation info
Ctlr-tAlt-ILast 5 talk messages
"Alt-G Send talk message to other tlf nodes"
- Delete last qso
Up-arrow Edit last qso
Insert, overwrite, and delete; + log view
= Confirm last call
_ (underscore) Confirm last exchange
#trx qrg -> mem
mem -> trx qrg
ctrl-g Grab a dx spot
ctrl-a Add a dx spot to the spot list or bandmap
ctrl-b Send message to cluster
ctrl-f Change TRX frequency with up_arrow, down_arrow (100 Hz at the time)
:PACketgoto packet terminal
:VIEw Up-arrow View the log with LESS
:EDIt Edit the log with JOE (ctrl-K H = help), vi or e3
:LISt List CW messages
:MESsage Edit CW messages
:set, :cfgedit logcfg.dat configuration file
:WRIte Write Cabrillo file (for selected contests:
! Get a new shell
:EXIt Alt-X, Alt-QExit the program

Back to contents


:mult Alt-M, Alt-CToggle remaining multiplier display
:contest Toggle contest mode on/off
:check dupe check window on
:nocheck dupe check window off
:scoreAlt-S, Alt-R Toggle score window on/off
:cluster Alt-AShow cluster window or...
:map Alt-,Show Band Map or...
:spots Alt-A Show last 10 spots or...
:freq Alt-J Show frequency or band info...
:cloff Alt-A No cluster info (non-assisted contest operation)
:infonetwork status
:cty Alt-M Show country multipliers per continent
:zone Alt-ZToggle zones/sections worked display
:trxcontroltoggle trxcontrol on/off (default off, only makes sense
with rigcontrol capability)
:ritclearrit reset on/off

Back to contents

Logcfg.dat file

CTCOMPATIBLE CT compatible qso logging (default TR)
choose your favourite editor for :edit and :set
CALL=PA0RCT don't forget to change this one !!
#CONTEST=any (you name it) #
CQWW_M2 is set togetherwith CONTEST=cqww if you are working in the M2 category. This sets the station info into the cabrillo file (stn1 or stn 0).

Use CONTEST=qso for general log use.
LOGFILE=dxped.log don't forget to change this one !!
TIME_OFFSET=-1 time offset to utc in hours if your system clock does not run on utc.
PA3FKN keyer
Serial port keyer from 9A3TY
daemon udp port
daemon host address ( for this machine)
##---speed (6 ... 60 wpm)
##---weight (-5 ... 5 ms)
##---txdelay (ms)
##---sidetone (200...800, 0 = mute)
set the keyer parameters
most (except speed and sidetone) are only available for the parallel port keyer
telnet host address of cluster

port number of cluster (8000 for pi4tue)


file system interface


short form address of this node
ip network address of other node
ip network address of other node

log LAN messages recvd by this nodein file debuglog

set time difference to system time (hrs)

This station is time sync master

rig control on
rig port is ttyS0
rig port is ttyS1
rig speed is 9600 Bd
clear RIT after qso
show large freq. window
switch information windows on/off
switch partial call function on
auto_complete function
see many calls :-)
set initial value for muf calculation
F1=CQ CQ DX DE % % k
F2=@ DE %
F3=@ ++[--
F4=TU 73
F5= @
F9= ?
F10= QRZ?
F11= PSE K
F12=TEST % %

% = call
@ = hiscall
# = serial
[ = RST

+ = increase cw speed
- = decrease cw speed
(works only with parport
F12: auto_cq message

contest mode: TU message in CQ mode
contest mode: TU message in S&P mode

e.g. TT1 instead of 001

relict from TRlog
NOB4 Don't send QSO B4 message in F7, work the dupe!
#CONTEST_MODE Contest mode
#CALLUPDATE Update call in exchange window (arrl ss and cqww only)
#MIXED Mixed mode
#RECALL_MULTS used in "other" contest mode when exchange does not change between bands
Points per qso for scoring
#2EU3DX_POINTS 2 points for own continent, 3 for other continents
#SERIAL_EXCHANGE exchange is serial number
#COUNTRY_MULT multiplier is CQDX country
#SECTION_MULT exchange is section, mult is section
#SERIAL+SECTION exchange is serial nr. + section, mult is section
#MULT_LIST=xxxxx name of multipliers file
#WYSIWYG_MULTIBAND mult used in "other" contest mode, counts per band
#WYSIWYG_ONCE mult used in "other" contest mode, counts once per contest
power multiplier for qrp contests or e.g. the arrl field day
the qso points are multiplied by this fixed amount, depending on output power
#PORTABLE_MULT_2 Multiply points x2 if /P stn
#MARKERCALLS=xxxx generate markefile for xplanet (dots + calls)
#MARKERDOTS=xxxx generate markerfile for xplanet (dots only)
#MARKERS=xxxx generate markerfile for xplanet (include last line cluster output)

Back to contents


It is possible to make your own combination of points and multipliers. E.g.:

If you are a G-stn and you would want to program the EUHFC contest you could use:

This will take care of the "license year" multipliers, which count as a multiplier on each band, and give you one point per qso. The score window will show the proper data, and the contest will be rescored every time you restart tlf.

If you are an OH-stn and you would want to program the NRAU contest you could use:
In the working directory you place a file called "nrau" with the multipliers, e.g.:

If you are in the USA and want to take part in the PACC contest:

CONTEST=pacc (NOT pacc_pa, that is for the PA stns...)
In the working directory (e.g. ./tlf/pacc) you place the logcfg.dat and a file called "pacc" with the multipliers, e.g.:

More capabilities will follow...

With time, more basic capabilities can be developed to provide a "menu" to program more contests....
This is a matter of time and priorities.


If you find any, or have suggestions for TLF, send comment to PA0RCT@AMSAT.ORG

Licence and copyright

Copyright 2001, 2002 Rein Couperus (PA0RCT)

This program is distributed under the terms of the GNU General Public License.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA