Skip to content

Releases: flwyd/adif-multitool

v0.1.20

16 Feb 06:24
Compare
Choose a tag to compare
Download instructions

Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt or adifmt.exe, make it executable
with chmod a+x adifmt, and put it somewhere in your PATH environment like
~/bin/. Verify it was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1 chips or newer.
    Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern PCs,
    adifmt-windows-arm64 for tablets and other ARM devices, and
    adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm for
    Raspberry Pi or other embedded/mobile devices. Otherwise, download
    adifmt-linux-amd64 (64-bit) or adifmt-linux-386 (32-bit).

Alternatively, you can get the latest changes by installing from source:
go install github.com/flwyd/adif-multitool/adifmt@latest

Changes in this release

0.1.20 - 2025-02-15

Added

  • count command prints the number of records of each combination of a set of
    fields. For example, adifmt count --fields BAND,MODE prints the number of
    contacts made for each band plus mode combination. If a field is blank or not
    set on a particular record it contributes an empty string to the combination.
    adifmt count without the --fields option prints the total number of
    records in the file. CSV or TSV output makes count output easy to pass to
    another program like a spreadsheet for further analysis.
  • CONT (continent) works with adifmt infer and adifmt validate based on
    the DXCC or COUNTRY field.
  • validate --required-fields supports conditionals (--if, --if-not,
    --or-if, --or-if-not) to determine which records must have certain fields
    set. All records are checked for data type validity, e.g. number formatting.
  • validate will produce an error if latitude is given as east/west or if
    longitude is given as north/south. It is also an error for latitude to be
    greater than 90°, not just greater than 180°.
  • validate will warn if LAT or LON is set but the other one isn’t;
    likewise for MY_LAT/MY_LON. It’s possible to know latitude without also
    knowing longitude, but modern technology usually gives both together, so you
    probably had a copy-paste error.
  • validate handles the CNTY_ALT/MY_CNTY_ALT field, currently only used for
    New Zealand regions. Currently doesn’t require that each enumeration name
    only appears once.
  • --adi-allow-unknown-tags allows angle brackets in comments <Like-This>
    if they don’t look like valid ADI tags or QSO data specifiers like <EOR> or
    <NAME:42>. This is not intended to be valid in the ADIF specification but
    Logbook of The World includes a <APP_LoTW_EOF> field
    which this option will turn into a file comment like [APP_LoTW_EOF].

CQ Zones and
ITU Zones:

  • infer will set the relevant zone field if the DXCC or COUNTRY field is
    set and the entity is in a single zone. It will also infer the zone if the
    STATE field is set and the state is only in one zone and the ADIF primary
    administrative division enumeration indicates the zone of the subdivision.
    For example, COUNTRY=India will set CQZ=22 ITUZ=41 because India does not
    overlap CQ or ITU zone boundaries. COUNTRY=Kazakhstan will set CQZ=17 but
    not set ITUZ at all, since Kazakhstan straddles the ITU Zone 29/30 boundary
    and ADIF does not define any subdivisions for the country. DXCC=291 (USA)
    would infer nothing because it’s in both multiple CQ Zones and multiple ITU
    Zones. DXCC=291 STATE=CA would infer CQZ=3 ITUZ=6 since California is in
    just one zone of each type, but DXCC=291 STATE=MT would just infer CQZ=4
    since Montana is in two ITU Zones.
  • validate will consider a record valid if the CQ and ITU Zones (if present)
    are consistent with the DXCC and primary subdivision. No additional location
    checks, e.g. comparing gridsquare to zone boundaries, is done.
  • MY_CQ_ZONE and MY_ITU_ZONE work as well.
  • CQ and ITU Zones also work for DXCC entities which have been removed from the
    active list, e.g. Zanzibar.
  • Some multi-zone countries are missing zone data in the primary administrative
    subdivision enumeration.
    An ADIF proposal
    to expand and correct this data has been proposed, but it may be some time
    before the next ADIF version. ADIF Multitool may add its own subdivision
    associations before then.
  • There is some variance between amateur radio organizations on exactly where
    ITU boundaries lie. This program uses the
    CQWW WAZ list for CQ-zone-to-entity
    associations, the
    AARL DXCC list
    for ITU-to-entity associations, and zone-check.eu to
    determine which ITU Zones a subdivision crosses. See also the mapability
    links above for some explanation of data challenges. Maritime boundaries
    between zones are not well defined and this program does not attempt to
    map geographic points to zones (or to geopolitical entities).

Changed

  • fix now trims leading and trailing spaces (and other whitespace) from
    fields.
  • Started a changelog file so it’s easier to learn what’s new in
    a release.
  • help documentation tweaks for clarity and consistency.

Fixed

  • Consistently trim leading and trailing space from ADI and ADX comments. If a
    comment is nothing but space, don’t preserve it in the output.
    Note: record comments and file comments are preserved from input through
    output, but header comments, such as the text at the top of an ADI file, are
    ignored. This could change in the future, but I don’t want to preserve all
    the “Generated” lines created as part of a pipeline.
    See discussion.
  • Franz Josef Land DXCC entity is part of Russia, Arkhangelsk Oblast.

Removed

Deprecated flags have been removed and will now show a generic option parsing
error rather than a specific error: --cabrillo-my-exchange-field,
--cabrillo-their-exchange-field, and --cabrillo-their-exchange-field-alt.

v0.1.19-rc4

16 Feb 05:37
Compare
Choose a tag to compare
v0.1.19-rc4 Pre-release
Pre-release

Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt or adifmt.exe, make it executable
with chmod a+x adifmt, and put it somewhere in your PATH environment like
~/bin/. Verify it was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1 chips or newer.
    Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern PCs,
    adifmt-windows-arm64 for tablets and other ARM devices, and
    adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm for
    Raspberry Pi or other embedded/mobile devices. Otherwise, download
    adifmt-linux-amd64 (64-bit) or adifmt-linux-386 (32-bit).

0.1.19-rc4 - 2025-02-15

Added

  • count command prints the number of records of each combination of a set of
    fields. For example, adifmt count --fields BAND,MODE prints the number of
    contacts made for each band plus mode combination. If a field is blank or not
    set on a particular record it contributes an empty string to the combination.
    adifmt count without the --fields option prints the total number of
    records in the file. CSV or TSV output makes count output easy to pass to
    another program like a spreadsheet for further analysis.
  • CONT (continent) works with adifmt infer and adifmt validate based on
    the DXCC or COUNTRY field.
  • validate --required-fields supports conditionals (--if, --if-not,
    --or-if, --or-if-not) to determine which records must have certain fields
    set. All records are checked for data type validity, e.g. number formatting.
  • validate will produce an error if latitude is given as east/west or if
    longitude is given as north/south. It is also an error for latitude to be
    greater than 90°, not just greater than 180°.
  • validate will warn if LAT or LON is set but the other one isn’t;
    likewise for MY_LAT/MY_LON. It’s possible to know latitude without also
    knowing longitude, but modern technology usually gives both together, so you
    probably had a copy-paste error.
  • validate handles the CNTY_ALT/MY_CNTY_ALT field, currently only used for
    New Zealand regions. Currently doesn’t require that each enumeration name
    only appears once.
  • --adi-allow-unknown-tags allows angle brackets in comments <Like-This>
    if they don’t look like valid ADI tags or QSO data specifiers like <EOR> or
    <NAME:42>. This is not intended to be valid in the ADIF specification but
    Logbook of The World includes a <APP_LoTW_EOF> field
    which this option will turn into a file comment like [APP_LoTW_EOF].

CQ Zones and
ITU Zones:

  • infer will set the relevant zone field if the DXCC or COUNTRY field is
    set and the entity is in a single zone. It will also infer the zone if the
    STATE field is set and the state is only in one zone and the ADIF primary
    administrative division enumeration indicates the zone of the subdivision.
    For example, COUNTRY=India will set CQZ=22 ITUZ=41 because India does not
    overlap CQ or ITU zone boundaries. COUNTRY=Kazakhstan will set CQZ=17 but
    not set ITUZ at all, since Kazakhstan straddles the ITU Zone 29/30 boundary
    and ADIF does not define any subdivisions for the country. DXCC=291 (USA)
    would infer nothing because it’s in both multiple CQ Zones and multiple ITU
    Zones. DXCC=291 STATE=CA would infer CQZ=3 ITUZ=6 since California is in
    just one zone of each type, but DXCC=291 STATE=MT would just infer CQZ=4
    since Montana is in two ITU Zones.
  • validate will consider a record valid if the CQ and ITU Zones (if present)
    are consistent with the DXCC and primary subdivision. No additional location
    checks, e.g. comparing gridsquare to zone boundaries, is done.
  • MY_CQ_ZONE and MY_ITU_ZONE work as well.
  • CQ and ITU Zones also work for DXCC entities which have been removed from the
    active list, e.g. Zanzibar.
  • Some multi-zone countries are missing zone data in the primary administrative
    subdivision enumeration.
    An ADIF proposal
    to expand and correct this data has been proposed, but it may be some time
    before the next ADIF version. ADIF Multitool may add its own subdivision
    associations before then.
  • There is some variance between amateur radio organizations on exactly where
    ITU boundaries lie. This program uses the
    CQWW WAZ list for CQ-zone-to-entity
    associations, the
    AARL DXCC list
    for ITU-to-entity associations, and zone-check.eu to
    determine which ITU Zones a subdivision crosses. See also the mapability
    links above for some explanation of data challenges. Maritime boundaries
    between zones are not well defined and this program does not attempt to
    map geographic points to zones (or to geopolitical entities).

Changed

  • fix now trims leading and trailing spaces (and other whitespace) from
    fields.
  • Started a changelog file so it’s easier to learn what’s new in
    a release.
  • help documentation tweaks for clarity and consistency.

Fixed

  • Consistently trim leading and trailing space from ADI and ADX comments. If a
    comment is nothing but space, don’t preserve it in the output.
    Note: record comments and file comments are preserved from input through
    output, but header comments, such as the text at the top of an ADI file, are
    ignored. This could change in the future, but I don’t want to preserve all
    the “Generated” lines created as part of a pipeline.
    See discussion.
  • Franz Josef Land DXCC entity is part of Russia, Arkhangelsk Oblast.

Removed

Deprecated flags have been removed and will now show a generic option parsing
error rather than a specific error: --cabrillo-my-exchange-field,
--cabrillo-their-exchange-field, and --cabrillo-their-exchange-field-alt.

v0.1.19-rc3

16 Feb 05:16
Compare
Choose a tag to compare
v0.1.19-rc3 Pre-release
Pre-release

Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt or adifmt.exe, make it executable
with chmod a+x adifmt, and put it somewhere in your PATH environment like
~/bin/. Verify it was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1 chips or newer.
    Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern PCs,
    adifmt-windows-arm64 for tablets and other ARM devices, and
    adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm for
    Raspberry Pi or other embedded/mobile devices. Otherwise, download
    adifmt-linux-amd64 (64-bit) or adifmt-linux-386 (32-bit).

v0.1.19-rc2

16 Feb 04:36
Compare
Choose a tag to compare
v0.1.19-rc2 Pre-release
Pre-release

Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt or adifmt.exe, make it executable
with chmod a+x adifmt, and put it somewhere in your PATH environment like
~/bin/. Verify it was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1 chips or newer.
    Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern PCs,
    adifmt-windows-arm64 for tablets and other ARM devices, and
    adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm for
    Raspberry Pi or other embedded/mobile devices. Otherwise, download
    adifmt-linux-amd64 (64-bit) or adifmt-linux-386 (32-bit).

v0.1.19-rc1

16 Feb 04:30
Compare
Choose a tag to compare
v0.1.19-rc1 Pre-release
Pre-release

Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt or adifmt.exe, make it executable
with chmod a+x adifmt, and put it somewhere in your PATH environment like
~/bin/. Verify it was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1 chips or newer.
    Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern PCs,
    adifmt-windows-arm64 for tablets and other ARM devices, and
    adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm for
    Raspberry Pi or other embedded/mobile devices. Otherwise, download
    adifmt-linux-amd64 (64-bit) or adifmt-linux-386 (32-bit).

v0.1.18

04 Jan 05:32
Compare
Choose a tag to compare

Upgrade specification to ADIF 3.1.5. See the annotated spec for differences since 3.1.4.
This release contains no other changes to functionality.

Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt or
adifmt.exe, make it executable with chmod a+x adifmt, and put
it somewhere in your PATH environment like ~/bin/. Verify it
was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1
    chips or newer. Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern
    PCs, adifmt-windows-arm64 for tablets and other ARM devices,
    and adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm
    for Raspberry Pi or other embedded/mobile devices. Otherwise,
    download adifmt-linux-amd64 (64-bit) or `adifmt-linux-386) (32).

v0.1.18-rc0

29 Dec 07:21
Compare
Choose a tag to compare
v0.1.18-rc0 Pre-release
Pre-release

Upgrade specification to ADIF 3.1.5. See the annotated spec for differences since 3.1.4.
This release contains no other changes to functionality.
Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt or
adifmt.exe, make it executable with chmod a+x adifmt, and put
it somewhere in your PATH environment like ~/bin/. Verify it
was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1
    chips or newer. Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern
    PCs, adifmt-windows-arm64 for tablets and other ARM devices,
    and adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm
    for Raspberry Pi or other embedded/mobile devices. Otherwise,
    download adifmt-linux-amd64 (64-bit) or `adifmt-linux-386) (32).

v0.1.17

28 Sep 20:56
Compare
Choose a tag to compare

Add --field-order option to control the order of fields in the output,
this is particularly useful when a TSV or CSV will be passed to another tool.

Also fixes a program crash in v0.1.16 when no command line options are set.

Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt or
adifmt.exe, make it executable with chmod a+x adifmt, and put
it somewhere in your PATH environment like ~/bin/. Verify it
was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1
    chips or newer. Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern
    PCs, adifmt-windows-arm64 for tablets and other ARM devices,
    and adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm
    for Raspberry Pi or other embedded/mobile devices. Otherwise,
    download adifmt-linux-amd64 (64-bit) or `adifmt-linux-386) (32).

Full Changelog: v0.1.16...v0.1.17

v0.1.17-rc0

27 Sep 07:06
Compare
Choose a tag to compare
v0.1.17-rc0 Pre-release
Pre-release

Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt or
adifmt.exe, make it executable with chmod a+x adifmt, and put
it somewhere in your PATH environment like ~/bin/. Verify it
was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1
    chips or newer. Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern
    PCs, adifmt-windows-arm64 for tablets and other ARM devices,
    and adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm
    for Raspberry Pi or other embedded/mobile devices. Otherwise,
    download adifmt-linux-amd64 (64-bit) or `adifmt-linux-386) (32).

Full Changelog: v0.1.16...v0.1.17-rc0

v0.1.16

18 Sep 06:06
Compare
Choose a tag to compare

Expand Cabrillo support to handle almost any contest exchange, except cases where there are two different exchanges at different times, like QTC in DARC WAE contests. Cabrillo import or export must now specify --cabrillo-my-exchange and --cabrillo-their-exchange, see README.md for format examples. Also fixed some Cabrillo corner cases like SSB + FM and RTTY + digital being considered MIXED category rather than PHONE or DIGI respectively.

Add --csv-omit-header and --tsv-omit-header for cases where field names should not be output in the first row, e.g. if the result will be passed to POSIX sort or uniq commands. This is most useful with adifmt select --fields … so you can ensure the field list and order is only what you expect.

Accept filenames before command line options (i.e. right after the command name) in addition to after, since it can be hard to locate the filename in a long pipeline.

Fixed a crash when sorting fields which are string lists.


Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt or
adifmt.exe, make it executable with chmod a+x adifmt, and put
it somewhere in your PATH environment like ~/bin/. Verify it
was installed by running adifmt version.

  • macOS users: Download adifmt-darwin-arm64 for Macs with M1
    chips or newer. Download adifmt-darwin-amd64 for older Macs.
  • Windows users: Download adifmt-windows-amd64 for most modern
    PCs, adifmt-windows-arm64 for tablets and other ARM devices,
    and adifmt-windows-386 for older 32-bit computers.
  • Linux users: Download adifmt-linux-arm64 or adifmt-linux-arm
    for Raspberry Pi or other embedded/mobile devices. Otherwise,
    download adifmt-linux-amd64 (64-bit) or `adifmt-linux-386) (32).

Full Changelog: v0.1.15...v0.1.16