1977 1980's Present


Here are a few software utilities, data files and informational bits which are freely available to other amateur radio operators:

KX3 Sample File for the Elecraft K3 & KX3 Memory Editor
Super Check Partial for GenLog (Updated May 17, 2013)
Updating GenLog and NAQCC data for NAQCC Sprints
Callsign ID Timer
Dipole Calculations Spreadsheet
APRS Local Information Beacons
Ham Radio Deluxe Utilities (for HRD 3/4/5/6) (Updated May 17, 2013)
Ham Radio Deluxe Utilities Reporter (for HRD 3.x/4.x/5.x)
OmniRig / Ham Radio Deluxe Bridge (for HRD 3.x/4.x)
WebBuddy for Win500 (GRE PSR-500/PSR-600)
ScanBuddy for GRE PSR-500/PSR-600 and Pro-106/Pro-197 Scanners
HRD DDE Sample Sourcecode
Microsoft Access SQL query for the DXXE Challenge Award (HRD 3.x/4.x)
Delphi COM Object for HRD Database (HRD 3.x/4.x)
How to Talk DDE with Ham Radio Deluxe 3.x/4.x from Delphi
PSKReporter Delphi Interface Code
eQSL Download Utility (Updated Mar 11 2018)
PC Clock Set from GPS
CW Skimmer Scheduler
Optoelectronics Optocom Receiver Control
DX Monitor and CW Skimmer Alert File Generator/Updater
DCU-1 Rotor Control
UI-View32 Utilities
Using OmniRig from Delphi or WinBatch
RegEx for Amateur Radio Callsigns
Using the K4HAV FCC Data Files
DXMonitor Frequency Filters


KX3 Sample File for the Elecraft K3 & KX3 Memory Editor

I looked to see if I could find someone's sample memory file for the Elecraft KX3 or K3 to use as a basis for my own setup and was unable to find one. Here's my first pass which other Elecraft owners might find useful, as a starting point for their own setup. Right-click and do a save-as on the following link: KX3_Memories.xml

Super Check Partial for GenLog (Updated May 17, 2013)

I use GenLog in the NAQCC Sprint and wanted a super check partial function so I wrote a utility that loads the NAQCC.dat file, if found, and parses it for the NAQCC member callsigns. It can also, optionally, load the normal master.scp when GenLog is used in other sprints/contests.

Once the utility is started it "attaches" itself to the bottom of the GenLog window. As you enter a callsign into the Call field of GenLog, the SCP utility displays possible matching callsigns.

This was written for and tested with GenLog325 v7.50 on Windows XP.

Requirement: This was a "quick hack" so GenLog, the NAQCC.dat and/or the master.scp data files must be located in C:\GenLog32.

Updated Oct 11, 2012:

  1. NAQCC member # lookup added.
  2. IMPROVEMENT: You can use the GenLogSCP callsign field now to enter in callsigns while GenLog is running. Type the callsign in GenLogSCP and press Enter and GenLog gets application focus.
  3. Double-click a GenLogSCP result and the callsign is entered into GenLog for you. GenLog gets application focus.
  4. For either a GenLogSCP double-click or Enter key in the GenLogSCP Callsign field, you can set which field of GenLog gets focus: Callsign, RST Sent, or RST Received.
  5. Right-click your mouse over the SCP utility and choose Update NAQCC to have GenLog data files downloaded and unzipped to the GenLog directory.
  6. BUG: If any app had a very long title and GenLog was not started the SCP utility would fail to start. Fixed.
  7. BUG: Data was reloading on each lookup causing slower than necessary performance. Fixed. Data is only loaded at startup or after an update.

Updated May 17, 2013

  1. Updated to work with GenLog 3.26 v8

Download here.

SCP for GenLog

Technical Note: Because I am using the Windows API (Win32) to parse the window handles of the GenLog form to find the callsign field, and because many of the fields of GenLog use the same control ID (1001), and because different versions of Windows may not create the fields in the same order as Windows XP, there is a chance the current version may not work on Vista, Win7/8. If anyone can report success or failure on those platforms I would very much appreciate it. Any feedback always welcome.

Updating GenLog and NAQCC data for NAQCC Sprints.

I use the standard GenLog program and wanted a simple way to make sure my program and data were up to date prior to a sprint. The following CMD/Batch file saves the current EXE to a backup, updates the program, updates the GenLog data files and finally updates the NAQCC data file. You may have to install a copy of wget and unzip on your system path (or in the GenLog directory if you don't know how to do that) for the script to work. Save the following to a cmd or batch file in your GenLog32 subdirectory:

if not exist GenLog325.exe goto skiprename
if exist GenLog325.bak del GenLog325.bak
move GenLog325.exe GenLog325.bak
if exist gen325upd.exe del gen325upd.exe
wget http://qsl.net/w3km/gen325upd.exe
if exist gen_data.zip del gen_data.zip
wget http://qsl.net/w3km/gen_data.zip
unzip /o gen_data.zip
if exist naqcc.zip del naqcc.zip
wget http://naqcc.info/naqcc.zip
unzip /o naqcc.zip

Callsign ID Timer

My normal operations do not require a callsign ID timer but plans to operate NAQCC special event callsign N5A requires me to ID every hour using my personal callsign. To make this easier to track I wrote this ID timer that can be reset, no matter which application has focus, by pressing F12. Of course, on your computer, if F12 launches a nuclear tipped missile or something else detrimental you might want to use the Reset button instead, but most applications ignore F12.

Tips: Right-Click the mouse over the app to change the timeout, hide/show the app title bar and enable or disable the timer. You can resize the form to any size you like and the countdown font size will adjust appropriately. It is simple to size the form to make a nice visible banner at the top of your screen. A flashing red timeout message displays and a non-intrusive clicking sound occurs when you've reached the timeout. Download here.

ID Timer Image 1

ID Timer Image 2


Dipole Calculations Spreadsheet

This is an Excel spreadsheet for calculating lengths and heights for CW and SSB portions of the 1.8-50.2 MHz ham bands. Includes calculations for NVIS, "compromise" DX/NVIS, .25, .60 and .75 wavelength heights. If you do not want to tweak the spreadsheet, here's the PDF version.

Dipole Calculations

APRS Local Information Beacons

In support of the APRS Local Info Initiative I've written this APRS Beacon and Beacon Editor for Windows which can push data via AGWPE & IGate. More information is available here.

APRS Beacon

Win32 Binary/EXE
Source Code
(as of August 25th, 2009)


Ham Radio Deluxe Utilities for HRD 3.x/4.x/5.x/6.x

Ham Radio Deluxe Utilities

Ham Radio Deluxe Utilities

Win32 Binary/EXE
Source Code
(as of August 24th, 2009)


May 16, 2013

HRDU v1.5
for HRD 5.x/6.x

May 17, 2013

Automated LoTW uploads, import LoTW confirmations, logbook updates from QRZ.com, import eQSL confirmations, download eQSL card images, generate GlobalQSL ADIF upload files, update personal information in the HRD logbook, generate HTML logbooks for your web site and more.

Please note: While Win64 is not directly supported, some Win64 users report no problems with HRDU on Win64.

Known Issues:

  • HRDU fails on login to eQSL accounts with multiple callsigns.

Ham Radio Deluxe Utilities Reporter (for Ham Radio Deluxe 4.x & 5.x)

This is my QSL label and envelope label printing program.

It works with the Ham Radio Deluxe database. I suggest that before using this program you download, install and configure Ham Radio Deluxe Utilities because these two programs share settings. Using the QRZ.com XML service, HRDU updates the QSL address/routing information.

HRDU Reporter Alpha

Win32 Binary/EXE
Source Code
(as of August 26th, 2009)

HRDU Reporter for HRD 5.x

"Mark DXCC Needed" and "Mark Selected as QSL Sent" functions are still being fixed

To access HRDU Reporter's configuration screen click the red arrow you see just to the left of "Program Configuration":

HRD Reporter Configuration

OmniRig / Ham Radio Deluxe Bridge (for HRD 3.x/4.x)

This program will connect to OmniRig (you select Rig 1 or Rig 2), it gets the frequency the rig is on and then, in the background modifies the HRD Log Add window's Band, Frequency, and optionally, Mode (LSB, USB, CW, AM, FM) fields. It's written for and tested on every band 160-6 including the WARC bands. Keystrokes are not pushed into the keyboard buffer so there's no concern about which application has focus and what you are typing at any given time. If the Log Add window is not visible, no problem, it waits if and till it appears to do its thing. Once this program is running, you can move the window out of the way and ignore it unless you want to terminate it.

OmniRig to HRD Log

Shown on top HRD just to show the program at work

WebBuddy for Win500 (GRE PSR-500/PSR-600)

WebBuddy parses HTML looking for frequency information and putting it into a format that the Starrsoft software will import. You can import nothing but frequencies if that's what you want. But there are also special functions to parse tables so that Alpha tags, Modes and Squelch codes are imported. The program stores a table of alpha substitutions so that long alpha tags can automatically be reduced to the scanner's 16 character alpha tag limit. There are other functions to format the data which are designed to reduce manual edits. Framed and non-framed web sites are supported. Download here.

ScanBuddy for GRE PSR-500/PSR-600 and Pro-106/Pro-197 Scanners

ScanBuddy monitors Spectrum Sweeper "hits" of the GRE PSR-500 and PSR-600 scanners and logs this information.

ScanBuddy helps determine the most likely source, and alternative sources of transmissions. If you have a RadioReference.com account, you can enter your local zip code, ScanBuddy determines your county, and the neighboring counties within a user set radius. Once a frequency "hit" occurs, the RadioReference database is queried and the possible licensees are listed in a combobox in distance order. Audio recordings are listed by frequency on the Recordings tab helping you to identify the source of the transmissions. Sources can be selectively locked out so that further transmissions/recordings are skipped. "Hit" information can be selectively sent to the clipboard for import into Win500.

Download ScanBuddy here.


HRD DDE Sample Sourcecode

This Winbatch script will talk to HRD via DDE. It will change the radio's operating frequency, the mode and whether transmit mode is on or off.

The following module contains old VB code which has been replaced by the HRD Utilities program. It contains three functions I wrote in Microsoft Access.

  • The first generates HTML from the logbook. It generates an HTML table where the rows are dynamically altered in color. You can view an example here with my logbook. To change the colors used just change the two values in the Javascript which is generated.
  • The second reads an eQSL ADIF file and updates the logbook to indicate which contacts have received an eQSL card. The time limit for matching QSOs is currently set to 5 minutes either side of your logbook. That is easily changed in the source.
  • The third function reads an LoTW ADIF file and stores LoTW confirmations in the Custom6 field. I have asked Simon Brown to add some LoTW fields to give the LoTW data a better storage location.

Please backup your databases. HRD has a built-in button that makes this as simple as clicking one button. And be sure and do so before running any functions in this source.

This file contains a Microsoft Access SQL query, written for the HRD database, can be used to display contacts which qualify for the DXXE Challenge Award. I created this SQL query as an experiment on how to dynamically generate a large OR SQL clause.

This file contains a COM object, including Delphi source code, which can be called from any language that does COM. It does database queries against the HRD database using the Microsoft JET DB driver.

How to Talk DDE with Ham Radio Deluxe from CodeGear's Delphi

The following code works most of the time. The current version of HRD appears to over poll the data from the radio making it not only unfriendly if you run multiple programs on the same serial port, but I believe it also explains HRD's reputation of being difficult to control via DDE. If you watch the HRD DDE monitor you will see it polling the data very quickly and it appears that if HRD is in the polling function when DDE is initiated, DDE requests get tossed. Use the DDEClient component and set connections to manual rather than automatic. The looping time delay is to give HRD time to execute the DDE request. If you destroy the DDEClient object too quickly HRD either does not get or process the DDE request. I suspect the O/S eats requests in that case so that HRD never sees them. Also, you could shift the ExecuteMacro statement into the looping time delay and probably get a more consistent execution of the change frequency request.

procedure ChangeFreq(strFreq:String);
// strFreq would be something like '14030000' for 20 meters

 intTimeCounter : Integer;
 HRD_DDEClient.SetLink('HRD_RADIO_000', 'HRD_CAT');
 if HRD_DDEClient.OpenLink then begin
   HRD_DDEClient.ExecuteMacro(pAnsiChar('freq '+strFreq),false);
   for intTimeCounter := 1 to 4 do begin
 end else
 ShowMessage('Link Failed');

PSKReporter Delphi Interface Code

This is the Delphi translation of N1DQ's C interface to the PSKReporter SDK he developed along with a simple Test program showing how to send data to the www.pskreporter.info site. Download.

eQSL Download Utility (Updated March 27 2018)

eQSL Download

Note: This utility does not currently handle eQSL accounts with multiple callsigns in a single eQSL account.

Note for Windows 7 Users: On windows 7, right click on the Executable, and go to Properties. Under the Compatibility, enable Run this program in compatibility mode for, and select "Windows XP (Service Pack 2) from the drop down list. On the bottom of that window, you need to enable "Run this program as an administrator" then click Apply, then OK. (Thanks to Kevin, KK4YEL for this information!)

This program will download an ADIF of all inbox/archive QSL cards and then download the QSL image for each eQSL card you've received. The program checks to see if the eQSL exists in the "Path to Store Cards" directory before downloading the card again. In other words, it will download it once and then if the file exists next time you run the program it will download only those eQSL cards that are missing.

The program was written using WinBatch. You can download a Windows binary of the program or download the source code.

The program does not currently check for invalid logins so make sure your callsign and password are correct. I'll add this check later when I have time. My goal was to get something that worked. I've used it on my inbox and my son's inbox so I know it works.

PC Clock Set from GPS

This Winbatch program will set the PC clock from an attached GPS. Source code is included in the zip file. The first commandline parameter is the COM port number the GPS is attached to. It will accept any COM port number that is valid for your PC. The second parameter is optional: a 'Y' or 'y' will show the results once it's done. Otherwise it silently updates the PC's clock.

CW Skimmer Scheduler

This file contains the source code for a couple of WinBatch scripts as well as precompiled EXEs that will automate CW Skimmer bandswitching. The purpose is to use CW Skimmer to rotate through the bands (you configure which) looking for CW activity. If you use the skimmer.dxwatch.com aggregator your data can be uploaded and viewed by others near-realtime. See the included readme.txt file for information on how to set the programs up.

The scheduler program uses Win32 API mailslots to allow multiple machines on a network to talk to each other. Each instance of the program can tell other instances which band it is monitoring and can automatically switch to another band if the band is already being monitored by another instance of CW Skimmer.

Optoelectronics Optocom Receiver Control

This is a Winbatch script that controls the Optocom receiver (no longer manufactured). There are some helper functions that do the dirty work of controlling the receiver along with some predefined control functions including turning the Optocom's BitBanger functionality on and off.

DX Monitor and CW Skimmer Alert File Generator/Updater

This program downloads active DXpedition callsigns from NG3K's web page and appends new callsigns or overwrites the old Alert lists for DX Monitor and CW Skimmer. Download the Windows EXE. This program was written using CodeGear's Delphi 2007.

Alert Generator/Update

DCU-1 Rotor Control

This is a Winbatch program (source only) that was written to control my Yaesu rotor with an Idiom Press serial interface via the commandline. Written for scheduled or remote control of the rotor.

UI-View32 Utilities

  • UIView32_ChangeMap: Change which map is being displayed via the commandline. This is useful to run from the schedule editor or from anywhere else when you need UI-View32 to display a particular map (such as before doing a scheduled screen capture). Calls the UI-View32 "Load a Favourite View" menu item. This file includes a Windows binary and WinBatch source code. Example:
    • UIView32_ChgMaps "My Map Name Here"
  • These are my updated right-click menu items for UI-View32. Copy or replace the items you want in your Uiview32.ini file under the [RIGHT_CLICK_URLS] ini file section.

Using OmniRig from Delphi or WinBatch

Alex, VE3NEA has done a very nice job with OmniRig. Using it from any language that supports COM is very easy.

Here is a Delphi example:

 OmniRigEngine : Variant;

 OmniRigEngine := CreateOleObject('OmniRig.OmniRigX');
 OmniRigEngine.Rig1.FreqA := '21.035.980';


Using it from Winbatch is just as easy:

objOmniRig = ObjectCreate("OmniRig.OmniRigX")
objOmniRig.Rig1.FreqA =  '21.035.980'; 


Obviously it does a lot more than that but that's all it takes to start using OmniRig. You'll need to determine if you need to control Rig1 or Rig2 etc.

RegEx for Amateur Radio Callsigns

This is a accurate but general RegEx I developed to find amateur radio callsigns in text files. One flaw is that it also picks up 6 character grid squares. If you can improve upon it please send me any updates.


Using the K4HAV FCC Data Files

The K4HAV FCC datafiles are freely available and used by various ham radio programs. What I could not find documented was the file format of the 'converted' datafiles. Here are the details I've been able to reverse engineer from the data files:

Each addr_XX.txt file has a line of ascii and binary data for each Amateur callsign. You cannot treat the addr_XX.txt files as standard text files because binary EOF character values appear in the binary data. The format of each line is:

[Callsign]$[Name]&[Street Address]*[Zip Code]@[1 Char License Class][Previous Callsign if any]#[2 byte date containing birth date][2 byte date containing license effective date][2 byte date containing license expiration]

Now that you have the Zip Code you can go to the text file named [First Zip Code numeric value. eg. 7]ZIP and find the line containing the Zip Code value. Lines in that file are formatted as follows:

[ZipCode][City][State][County File Line Number]*

You get the County by going to the file named COUNTIES.TXT and reading the line number value we just got from the zip code file. You can read the file into an array and then just array[line no] making County lookups immediate.

You get the center coordinates of the county by going to the file named ZIP_AZ.TXT and finding the line which contains the Zip Code. The file is formatted as follows:

[ZipCode]*[5 digit Lat][4 digit Long, negative value assumed]

You can then calculate beam headings and grid square from the coords located in that file. You have to be aware though that, in some cases, the licensee may have one address on file with the FCC but physically operate from another location. The same applies to County information. QRZ.com information, on the other hand, is often updated to reflect the actual station location.

I haven't spent the time to completely unravel the date fields but this is what I know. The dates are calculated as follows: Add 29220 to the integer value and then CDate the resulting value. For early dates less than [unknown value] it appears you subtract 36316 from the value but I haven't had time to verify if that works in every case. At some point the FCC stopped including birthdate values so those callsign records will show a date value of 0

DX Monitor Frequency Filters