ZyLO is the official plugin SDK for zLog, a powerful and extensible logging software for amateur radio contests.
ZyLO is the official plugin SDK for zLog v2.8 or later. zLog is powerful and extensible logging software for amateur radio contests, and users can easily install plugins via plugin manager dialog.
First, prepare the package management system (brew
, choco
, and apt
) and install Go.
$ brew install go
$ choco install golang
$ sudo apt install -y golang-go
Then, run the following commands to set up the SDK.
$ go install github.com/nextzlog/zylo/zbuild@HEAD
$ zbuild setup
Create a directory and the source file shown below in it in the same way as creating a Go package.
package main
import "zylo/reiwa"
func init() {
// when plugin loaded
reiwa.OnLaunchEvent = onLaunchEvent
reiwa.OnFinishEvent = onFinishEvent
reiwa.OnAttachEvent = onAttachEvent
reiwa.OnAssignEvent = onAssignEvent
reiwa.OnDetachEvent = onDetachEvent
reiwa.OnInsertEvent = onInsertEvent
reiwa.OnDeleteEvent = onDeleteEvent
reiwa.OnVerifyEvent = onVerifyEvent
reiwa.OnPointsEvent = onPointsEvent
}
func onLaunchEvent() {
// when zLog launched
}
func onFinishEvent() {
// when zLog finished
}
func onAttachEvent(contest, configs string) {
// when contest attached
}
func onAssignEvent(contest, configs string) {
// if CFG calls this DLL
}
func onDetachEvent(contest, configs string) {
// when contest detached
}
func onInsertEvent(qso *reiwa.QSO) {
// when insert this QSO
}
func onDeleteEvent(qso *reiwa.QSO) {
// when delete this QSO
}
func onVerifyEvent(qso *reiwa.QSO) {
// score and multiplier
}
func onPointsEvent(score, mults int) int {
return score * mults
}
Run zbuild
inside the directory to build a plugin DLL with the same name as the directory.
$ zbuild build
$ zbuild build --version 2.8.3.0
To test the plugin, put the relative path to the DLL into zlog.ini
as follows and launch zLog.
[zylo]
DLLs=hstest.dll,yltest.dll,rttest.dll
First, create a TOML file and include the download URL and md5 checksum in the dll
table.
You can include the checksum directly or include the URL of the md5 file.
# dll.<name>
[dll.sample]
url = "https://example.com/releases/sample.dll"
sum = "https://example.com/releases/sample.dll.md5"
You can also publish other files along with the DLL, such as CFG and DAT files.
# cfg.<name>
[cfg.sample]
url = "https://example.com/releases/sample.cfg"
# dat.<name>
[dat.sample]
url = "https://example.com/releases/sample.dat"
Finally, write the plugin meta information, which will be displayed in the plugin manager.
# pkg.<name>
[pkg.sample]
tag = "title"
msg = "description"
web = "https://example.com/sample/index.html"
doc = "https://example.com/sample/details.md"
use = ["cfg.sample", "dat.sample", "dll.sample"] # dependency
exp = "unstable" # or "stable"
Publish the TOML file to a Git repository, and make an issue at nextzlog/todo to request crawling.
The following workflow automates plugin releases.
name: 'build'
on:
push:
branches:
- 'main'
jobs:
BuildDLL:
runs-on: ubuntu-latest
steps:
- uses: nextzlog/zylo@master
with:
token: $
directory: /path/to/golang/files
To delegate score calculation for user-defined contests to a plugin, add the following commands to the end of the CFG file.
exit
dll sample.dll # basename
The following functions are called only for DLLs specified in the CFG file.
OnAssignEvent
invoked only once at the start of the scoring delegation.OnVerifyEvent
determines the score and multiplier of the communication.OnPointsEvent
determines the total score of the contest communications.Plugins can monitor button and menu clicks and keyboard input in zLog application.
package main
import "zylo/reiwa"
func init() {
reiwa.OnLaunchEvent = onLaunchEvent
}
func onLaunchEvent() {
reiwa.HandleButton("MainForm.CWPlayButton", onButton)
reiwa.HandleEditor("MainForm.CallsignEdit", onEditor)
}
func onButton(num int) {
reiwa.DisplayToast("CWPlayButton was clicked")
}
func onEditor(key int) {
reiwa.DisplayToast(reiwa.Query("QSO with $B"))
}
Plugins can obtain the window handle of a zLog component with the GetUI
function.
Plugins can also use Go binding of Windows API to add their own components and handle events.
package main
import (
"fmt"
"unsafe"
"github.com/gonutz/w32"
"zylo/reiwa"
)
func init() {
reiwa.OnLaunchEvent = onLaunchEvent
reiwa.OnWindowEvent = onWindowEvent
}
func onLaunchEvent() {
h := w32.HMENU(reiwa.GetUI("MainForm.MainMenu"))
w32.AppendMenu(h, w32.MF_STRING, 810, "My Menu")
w32.DrawMenuBar(w32.HWND(reiwa.GetUI("MainForm")))
}
func onWindowEvent(msg uintptr) {
m := (*w32.MSG)(unsafe.Pointer(msg))
fmt.Printf("Window Message %v\n", m)
}
Plugins can get and set properties and execute methods of zLog components in the form of Delphi expressions.
package main
import "zylo/reiwa"
func init() {
reiwa.OnLaunchEvent = onLaunchEvent
}
func onLaunchEvent() {
reiwa.RunDelphi(`PluginMenu.Add(op.Put(MainMenu.CreateMenuItem(), "Name", "MyMenu"))`)
reiwa.RunDelphi(`op.Put(MainMenu.FindComponent("MyMenu"), "Caption", "Special Menu")`)
}
The following built-in functions are available.
op.Int(number) // converts real value to int value and returns it
op.Put(obj, key, value) // sets properties and returns the object
Plugins can retrieve the variables of the CW keyboard in zLog.
fmt.Println(reiwa.Query("$B,$X,$R,$F,$Z,$I,$Q,$V,$O,$S,$P,$A,$N,$L,$C,$E,$M"))
The following variables are also available.
fmt.Println(reiwa.Query("{V}")) // version number
fmt.Println(reiwa.Query("{F}")) // ZLO(ZLOX) file
fmt.Println(reiwa.Query("{C}")) // your call sign
fmt.Println(reiwa.Query("{B}")) // operating band
fmt.Println(reiwa.Query("{M}")) // operating mode
Feel free to make issues at nextzlog/todo. Follow @nextzlog on Twitter.
The following is a list of objects in the zLog main window.
They can be referenced by GetUI
and RunDelphi
functions.
object MainForm: TMainForm
object TLabel
object StatusLine: TStatusBar
object MainPanel: TPanel
object EditPanel1R: TPanel
object RcvdRSTEdit1: TEdit
object BandEdit1: TEdit
object ModeEdit1: TEdit
object PointEdit1: TEdit
object OpEdit1: TEdit
object SerialEdit1: TEdit
object PowerEdit1: TEdit
object CallsignEdit1: TOvrEdit
object NumberEdit1: TOvrEdit
object MemoEdit1: TOvrEdit
object TimeEdit1: TOvrEdit
object DateEdit1: TOvrEdit
object EditPanel2R: TPanel
object RigPanelC: TPanel
object RigPanelShape2C: TShape
object ledTx2C: TJvLED
object labelRig3Title: TLabel
object CallsignEdit2C: TOvrEdit
object NumberEdit2C: TOvrEdit
object RcvdRSTEdit2C: TEdit
object BandEdit2C: TEdit
object ModeEdit2C: TEdit
object SerialEdit2C: TEdit
object checkUseRig3: TCheckBox
object checkWithRig1: TCheckBox
object checkWithRig2: TCheckBox
object EditUpperLeftPanel: TPanel
object DateEdit2: TOvrEdit
object TimeEdit2: TOvrEdit
object EditUpperRightPanel: TGridPanel
object RigPanelA: TPanel
object RigPanelShape2A: TShape
object ledTx2A: TJvLED
object labelRig1Title: TLabel
object CallsignEdit2A: TOvrEdit
object NumberEdit2A: TOvrEdit
object RcvdRSTEdit2A: TEdit
object BandEdit2A: TEdit
object ModeEdit2A: TEdit
object SerialEdit2A: TEdit
object RigPanelB: TPanel
object RigPanelShape2B: TShape
object ledTx2B: TJvLED
object labelRig2Title: TLabel
object CallsignEdit2B: TOvrEdit
object NumberEdit2B: TOvrEdit
object RcvdRSTEdit2B: TEdit
object BandEdit2B: TEdit
object ModeEdit2B: TEdit
object SerialEdit2B: TEdit
object Grid: TStringGrid
object ToolBarPanel: TPanel
object CWToolBar: TPanel
object CWStopButton: TSpeedButton
object CWPauseButton: TSpeedButton
object buttonCwKeyboard: TSpeedButton
object SpeedLabel: TLabel
object CWPlayButton: TSpeedButton
object CWF1: THemisphereButton
object CWF2: THemisphereButton
object CWF3: THemisphereButton
object CWF4: THemisphereButton
object CWF5: THemisphereButton
object CWF6: THemisphereButton
object CWF7: THemisphereButton
object CWF8: THemisphereButton
object CWCQ1: THemisphereButton
object CWCQ2: THemisphereButton
object CWCQ3: THemisphereButton
object CWF9: THemisphereButton
object CWF10: THemisphereButton
object CWF11: THemisphereButton
object CWF12: THemisphereButton
object SideToneButton: TSpeedButton
object SpeedBar: TTrackBar
object SSBToolBar: TPanel
object VoiceStopButton: TSpeedButton
object VoicePauseButton: TSpeedButton
object buttonVoiceOption: TSpeedButton
object VoicePlayButton: TSpeedButton
object VoiceF1: THemisphereButton
object VoiceF3: THemisphereButton
object VoiceF2: THemisphereButton
object VoiceF4: THemisphereButton
object VoiceF5: THemisphereButton
object VoiceF6: THemisphereButton
object VoiceF7: THemisphereButton
object VoiceF8: THemisphereButton
object VoiceCQ1: THemisphereButton
object VoiceCQ2: THemisphereButton
object VoiceCQ3: THemisphereButton
object VoiceF9: THemisphereButton
object VoiceF10: THemisphereButton
object VoiceF11: THemisphereButton
object VoiceF12: THemisphereButton
object MainToolBar: TPanel
object SpeedButton4: TSpeedButton
object SpeedButton5: TSpeedButton
object SpeedButton6: TSpeedButton
object PartialCheckButton: TSpeedButton
object ScoreButton: TSpeedButton
object MultiButton: TSpeedButton
object RateButton: TSpeedButton
object LogButton: TSpeedButton
object Options2Button: TSpeedButton
object SuperCheckButtpn: TSpeedButton
object PacketClusterButton: TSpeedButton
object ZServerIcon: TImage
object OptionsButton: TSpeedButton
object buttonF2A: TSpeedButton
object panelCQMode: TPanel
object comboBandPlan: TComboBox
object panelOutOfPeriod: TPanel
object buttonCancelOutOfPeriod: TSpeedButton
object panelShowInfo: TPanel
object linklabelInfo: TLinkLabel
object MainMenu: TMainMenu
object FileMenu: TMenuItem
object FileNewItem: TMenuItem
object FileOpenItem: TMenuItem
object FileSaveItem: TMenuItem
object FileSaveAsItem: TMenuItem
object MergeFile1: TMenuItem
object Backup1: TMenuItem
object Export1: TMenuItem
object mSummaryFile: TMenuItem
object mPXListWPX: TMenuItem
object N1: TMenuItem
object menuCorrectStartTime: TMenuItem
object menuCorrectNR: TMenuItem
object N2: TMenuItem
object FilePrintItem: TMenuItem
object CreateELogJARL1: TMenuItem
object CreateELogJARL2: TMenuItem
object CreateJARLELog: TMenuItem
object CreateCabrillo: TMenuItem
object CreateDupeCheckSheetZPRINT1: TMenuItem
object mnMMTTY: TMenuItem
object N4: TMenuItem
object FileExitItem: TMenuItem
object Windows1: TMenuItem
object Score1: TMenuItem
object Multipliers1: TMenuItem
object QSOrate1: TMenuItem
object QSORateEx1: TMenuItem
object SuperCheck1: TMenuItem
object N11: TMenuItem
object PartialCheck1: TMenuItem
object CheckCall1: TMenuItem
object mnCheckMulti: TMenuItem
object mnCheckCountry: TMenuItem
object CWKeyboard1: TMenuItem
object CWMessagePad1: TMenuItem
object RigControl1: TMenuItem
object PacketCluster1: TMenuItem
object ZLinkmonitor1: TMenuItem
object ZServer1: TMenuItem
object Console1: TMenuItem
object Scratchsheet1: TMenuItem
object Bandscope1: TMenuItem
object RunningFrequencies1: TMenuItem
object mnTTYConsole: TMenuItem
object menuAnalyze: TMenuItem
object menuShowFunctionKeyPanel: TMenuItem
object menuShowQSYInfo: TMenuItem
object menuShowSO2RNeoCp: TMenuItem
object menuShowInformation: TMenuItem
object ShowMessageManagerSO2R1: TMenuItem
object menuShowCWMonitor: TMenuItem
object menuQTC: TMenuItem
object menuSettings: TMenuItem
object menuHardwareSettings: TMenuItem
object menuOptions: TMenuItem
object menuBandPlanSettings: TMenuItem
object menuQSORateSettings: TMenuItem
object menuTargetEditor: TMenuItem
object menuPluginManager: TMenuItem
object Network1: TMenuItem
object menuConnectToZServer: TMenuItem
object N6: TMenuItem
object menuDownloadAllLogs: TMenuItem
object menuMergeAllLogs: TMenuItem
object N3: TMenuItem
object menuDownloadOplist: TMenuItem
object menuDownloadSounds: TMenuItem
object N14: TMenuItem
object menuUploadOplist: TMenuItem
object menuUploadSounds: TMenuItem
object PluginMenu: TMenuItem
object View1: TMenuItem
object menuShowCurrentBandOnly: TMenuItem
object menuShowThisTXonly: TMenuItem
object menuShowOnlySpecifiedTX: TMenuItem
object menuShowTx0: TMenuItem
object menuShowTx1: TMenuItem
object menuShowTx2: TMenuItem
object menuShowTx3: TMenuItem
object menuShowTx4: TMenuItem
object menuShowTx5: TMenuItem
object menuShowTx6: TMenuItem
object menuShowTx7: TMenuItem
object menuShowTx8: TMenuItem
object menuShowTx9: TMenuItem
object N10: TMenuItem
object Sort1: TMenuItem
object menuSortByCallsign: TMenuItem
object menuSortByTime: TMenuItem
object menuSortByBand: TMenuItem
object menuSortByMode: TMenuItem
object menuSortByPower: TMenuItem
object menuSortByTxNo: TMenuItem
object menuSortByPoint: TMenuItem
object menuSortByOperator: TMenuItem
object menuSortByMemo: TMenuItem
object N9: TMenuItem
object mnHideCWPhToolBar: TMenuItem
object mnHideMenuToolbar: TMenuItem
object N12: TMenuItem
object IncreaseFontSize1: TMenuItem
object DecreaseFontSize1: TMenuItem
object Help1: TMenuItem
object menuAbout: TMenuItem
object menuQuickReference: TMenuItem
object N5: TMenuItem
object menuPortal: TMenuItem
object menuUsersGuide: TMenuItem
object HelpZyLO: TMenuItem
object OpenDialog: TOpenDialog
object SaveDialog: TSaveDialog
object BandMenu: TPopupMenu
object N19MHz: TMenuItem
object N35MHz: TMenuItem
object N7MHz: TMenuItem
object N10MHz1: TMenuItem
object N14MHz: TMenuItem
object N18MHz1: TMenuItem
object N21MHz: TMenuItem
object N24MHz1: TMenuItem
object N28MHz: TMenuItem
object N50MHz: TMenuItem
object N144MHz: TMenuItem
object N430MHz: TMenuItem
object N1200MHz: TMenuItem
object N2400MHz: TMenuItem
object N5600MHz: TMenuItem
object N10GHzup1: TMenuItem
object ModeMenu: TPopupMenu
object CW1: TMenuItem
object SSB1: TMenuItem
object FM1: TMenuItem
object AM1: TMenuItem
object RTTY1: TMenuItem
object FT41: TMenuItem
object FT81: TMenuItem
object Other1: TMenuItem
object GridMenu: TPopupMenu
object EditQSO: TMenuItem
object DeleteQSO1: TMenuItem
object InsertQSO1: TMenuItem
object N7: TMenuItem
object menuChangeBand: TMenuItem
object G1R9MHz: TMenuItem
object G3R5MHz: TMenuItem
object G7MHz: TMenuItem
object G10MHz: TMenuItem
object G14MHz: TMenuItem
object G18MHz: TMenuItem
object G21MHz: TMenuItem
object G24MHz: TMenuItem
object G28MHz: TMenuItem
object G50MHz: TMenuItem
object G144MHz: TMenuItem
object G430MHz: TMenuItem
object G1200MHz: TMenuItem
object G2400MHz: TMenuItem
object G5600MHz: TMenuItem
object G10GHz: TMenuItem
object menuChangeMode: TMenuItem
object CW2: TMenuItem
object SSB2: TMenuItem
object FM2: TMenuItem
object AM2: TMenuItem
object RTTY2: TMenuItem
object Other2: TMenuItem
object menuChangePower: TMenuItem
object H2: TMenuItem
object M2: TMenuItem
object L2: TMenuItem
object P2: TMenuItem
object menuChangeOperator: TMenuItem
object Clear1: TMenuItem
object menuChangeTXNr: TMenuItem
object menuChangeSentNr: TMenuItem
object menuChangeDate: TMenuItem
object N13: TMenuItem
object menuEditStatus: TMenuItem
object N8: TMenuItem
object SendSpot1: TMenuItem
object mnGridAddNewPX: TMenuItem
object OpMenu: TPopupMenu
object Timer1: TTimer
object FileExportDialog: TSaveDialog
object CWFMenu: TPopupMenu
object Edit1: TMenuItem
object NewPowerMenu: TPopupMenu
object P1: TMenuItem
object L1: TMenuItem
object M1: TMenuItem
object H1: TMenuItem
object GeneralSaveDialog: TSaveDialog
object ActionList1: TActionList
object actionQuickQSY01: TAction
object actionQuickQSY02: TAction
object actionQuickQSY03: TAction
object actionQuickQSY04: TAction
object actionQuickQSY05: TAction
object actionQuickQSY06: TAction
object actionQuickQSY07: TAction
object actionQuickQSY08: TAction
object actionShowSuperCheck: TAction
object actionShowZlinkMonitor: TAction
object actionPlayMessageA01: TAction
object actionPlayMessageA02: TAction
object actionPlayMessageA03: TAction
object actionPlayMessageA04: TAction
object actionPlayMessageA05: TAction
object actionPlayMessageA06: TAction
object actionPlayMessageA07: TAction
object actionPlayMessageA08: TAction
object actionCheckMulti: TAction
object actionShowCheckPartial: TAction
object actionPlayCQA2: TAction
object actionPlayCQA3: TAction
object actionPlayMessageB01: TAction
object actionPlayMessageB02: TAction
object actionPlayMessageB03: TAction
object actionPlayMessageB04: TAction
object actionPlayMessageB05: TAction
object actionPlayMessageB06: TAction
object actionPlayMessageB07: TAction
object actionPlayMessageB08: TAction
object actionPlayCQB2: TAction
object actionPlayCQB3: TAction
object actionInsertBandScope: TAction
object actionInsertBandScope2: TAction
object actionInsertBandScope3: TAction
object actionIncreaseFontSize: TAction
object actionDecreaseFontSize: TAction
object actionPageUp: TAction
object actionPageDown: TAction
object actionMoveTop: TAction
object actionMoveLeft: TAction
object actionDeleteOneChar: TAction
object actionMoveLast: TAction
object actionMoveRight: TAction
object actionPullQso: TAction
object actionDeleteLeftOneChar: TAction
object actionGetPartialCheck: TAction
object actionDeleteRight: TAction
object actionClearCallAndRpt: TAction
object actionShowCurrentBandOnly: TAction
object actionDecreaseTime: TAction
object actionIncreaseTime: TAction
object actionQTC: TAction
object actionReversePaddle: TAction
object actionCwTune: TAction
object actionPushQso: TAction
object actionFieldClear: TAction
object actionCQRepeat: TAction
object actionBackup: TAction
object actionFocusCallsign: TAction
object actionShowCWKeyboard: TAction
object actionFocusMemo: TAction
object actionFocusNumber: TAction
object actionFocusOp: TAction
object actionShowPacketCluster: TAction
object actionShowConsolePad: TAction
object actionFocusRst: TAction
object actionShowScratchSheet: TAction
object actionShowRigControl: TAction
object actoinClearCallAndNumAftFocus: TAction
object actionShowZServerChat: TAction
object actionToggleRig: TAction
object actionShowBandScope: TAction
object actionShowFreqList: TAction
object actionShowTeletypeConsole: TAction
object actionShowAnalyze: TAction
object actionShowScore: TAction
object actionShowMultipliers: TAction
object actionShowQsoRate: TAction
object actionShowCheckCall: TAction
object actionShowCheckMulti: TAction
object actionShowCheckCountry: TAction
object actionQsoStart: TAction
object actionQsoComplete: TAction
object actionNop: TAction
object actionRegNewPrefix: TAction
object actionControlPTT: TAction
object actionShowSuperCheck2: TAction
object actionGetSuperCheck2: TAction
object actionChangeBand: TAction
object actionChangeMode: TAction
object actionChangePower: TAction
object actionChangeCwBank: TAction
object actionChangeR: TAction
object actionChangeS: TAction
object actionSetCurTime: TAction
object actionDecreaseCwSpeed: TAction
object actionIncreaseCwSpeed: TAction
object actionCQRepeat2: TAction
object actionToggleVFO: TAction
object actionEditLastQSO: TAction
object actionQuickMemo1: TAction
object actionQuickMemo2: TAction
object actionCwMessagePad: TAction
object actionCorrectSentNr: TAction
object actionSetLastFreq: TAction
object actionQuickMemo3: TAction
object actionQuickMemo4: TAction
object actionQuickMemo5: TAction
object actionPlayMessageA09: TAction
object actionPlayMessageA10: TAction
object actionPlayMessageB09: TAction
object actionPlayMessageB10: TAction
object actionCQAbort: TAction
object actionPlayMessageA11: TAction
object actionPlayMessageA12: TAction
object actionPlayCQA1: TAction
object actionPlayMessageB11: TAction
object actionPlayMessageB12: TAction
object actionPlayCQB1: TAction
object actionToggleCqSp: TAction
object actionCQRepeatIntervalUp: TAction
object actionCQRepeatIntervalDown: TAction
object actionSetCQMessage1: TAction
object actionSetCQMessage2: TAction
object actionSetCQMessage3: TAction
object actionToggleRit: TAction
object actionToggleXit: TAction
object actionRitClear: TAction
object actionToggleAntiZeroin: TAction
object actionAntiZeroin: TAction
object actionFunctionKeyPanel: TAction
object actionShowQsoRateEx: TAction
object actionShowQsyInfo: TAction
object actionShowSo2rNeoCp: TAction
object actionSo2rNeoSelRx1: TAction
object actionSo2rNeoSelRx2: TAction
object actionSo2rNeoSelRxBoth: TAction
object actionSelectRig1: TAction
object actionSelectRig2: TAction
object actionSelectRig3: TAction
object actionSo2rNeoCanRxSel: TAction
object actionShowInformation: TAction
object actionToggleSo2r2bsiq: TAction
object actionSo2rNeoToggleAutoRxSelect: TAction
object actionToggleTx: TAction
object actionToggleSo2rWait: TAction
object actionToggleRx: TAction
object actionMatchRxToTx: TAction
object actionMatchTxToRx: TAction
object actionSo2rToggleRigPair: TAction
object actionChangeTxNr0: TAction
object actionChangeTxNr1: TAction
object actionChangeTxNr2: TAction
object actionPseQsl: TAction
object actionNoQsl: TAction
object actionShowMsgMgr: TAction
object actionChangeBand2: TAction
object actionChangeMode2: TAction
object actionChangePower2: TAction
object actionToggleTxNr: TAction
object actionShowCWMonitor: TAction
object actionShowCurrentTxOnly: TAction
object actionLogging: TAction
object actionSetRigWPM: TAction
object actionToggleMemScan: TAction
object actionToggleF2A: TAction
object SPCMenu: TPopupMenu
object VoiceFMenu: TPopupMenu
object menuVoiceEdit: TMenuItem
object timerCqRepeat: TTimer
object FileImportDialog: TOpenDialog
object timerOutOfPeriod: TTimer
object timerShowInfo: TTimer
const (
CW = iota
SSB
FM
AM
RTTY
OTHER
)
Enum of modes.
const (
K1900 = iota
K3500
M7
M10
M14
M18
M21
M24
M28
M50
M144
M430
M1200
M2400
M5600
G10UP
)
Enum of bands.
const ResponseCapacity = 256
Length limit of query response.
var CityMultiList string
Variable for embedding zLog DAT file.
var FileExtFilter string
File extension filter for I/O plugin.
var MinVersion = "2.8.3.0"
zLog version where this plugin works.
var OnAcceptEvent = func(qso *QSO) {
qso.SetMul1(qso.GetRcvd())
}
Sets QSO point and multiplier.
var OnAssignEvent = func(contest, configs string) {}
Called when scoring is delegated.
var OnAttachEvent = func(contest, configs string) {}
Called just after opening the contest.
var OnDeleteEvent = func(qso *QSO) {}
Called when a QSO record is deleted. Deletion is performed before addition.
var OnDetachEvent = func(contest, configs string) {}
Called just after closing the contest.
var OnExportEvent = func(source, format string) error {
return nil
}
Converts a ZLO file to a file in another format.
var OnFinishEvent = func() {}
Called when the plugin is finished.
var OnImportEvent = func(source, target string) error {
return nil
}
Converts a file in another format to a ZLO file.
var OnInsertEvent = func(qso *QSO) {}
Called when a QSO record is added.
var OnLaunchEvent = func() {}
Called when the plugin is launched.
var OnPointsEvent = func(score, mul1s int) int {
return score * mul1s
}
Calculates total score.
var OnVerifyEvent = func(qso *QSO) {
ok := true
ok = ok && qso.VerifyDupe()
ok = ok && qso.VerifyBand()
ok = ok && qso.VerifyMode()
ok = ok && qso.VerifySent()
ok = ok && qso.VerifyRcvd()
if ok {
OnAcceptEvent(qso)
} else {
qso.Invalid()
}
}
Determines QSO score and multiplier. Empty multiplier for an invalid QSO. Called several times before the QSO is recorded.
var OnWindowEvent = func(msg uintptr) {}
Receives window messages.
var PluginName = ""
The name of this plugin.
func AllowBand(bands ...byte)
Allows the specified bands.
func AllowBandRange(lo, hi byte)
Allows the specified bands.
func AllowCall(pattern string)
Allows call signs of the pattern.
func AllowDupe()
Allows duplicate QSO.
func AllowMode(modes ...byte)
Allows the specified modes.
func AllowModeRange(lo, hi byte)
Allows the specified modes.
func AllowRcvd(pattern string)
Allows received contest numbers of the pattern.
func AllowSent(pattern string)
Allows submitted contest numbers of the pattern.
func DisplayModal(msg string, args ...interface{})
Displays the specified string in a dialog.
func DisplayPanic()
Catch a panic and display it in a dialog.
defer DisplayPanic()
func DisplayToast(msg string, args ...interface{})
Displays the specified string in a toast.
func DumpZLO(qso ...QSO) (bin []byte)
Converts QSOs to byte sequence with header information.
func GetINI(section, key string) string
Gets the specified setting.
func GetUI(expression string) uintptr
Gets the specified window handle.
GetUI("MainForm.FileOpenItem")
GetUI("MenuForm.CancelButton")
func HandleButton(name string, handler func(int))
Registers an event handler for the button with the given name. Subsequent registrations after plugin startup will be ignored.
func HandleEditor(name string, handler func(int))
Registers an event handler for the editor with the given name. Subsequent registrations after plugin startup will be ignored.
func PathToINI() string
zlog.ini.
func Query(text string) string
Makes the specified query.
func RunDelphi(exp string, args ...interface{}) int
Calls the specified Delphi script. Limited to zLog 2.8.3.0 and later.
func SetINI(section, key, value string)
Sets the specified setting.
type QSO struct {
SRST int16
RRST int16
Mode byte
Band byte
Pow1 byte
New1 bool
New2 bool
Score byte
Dupe bool
TxID byte
Pow2 int32
}
zLog QSO structure.
func LoadZLO(bin []byte) (logs []QSO)
Converts byte sequence with header information to QSOs.
func (qso *QSO) Delete()
Deletes the QSO record in zLog.
func (qso *QSO) DumpWithoutHead(w io.Writer)
Dumps QSO structure without header information.
func (qso *QSO) GetCall() string
Returns the call sign.
func (qso *QSO) GetCallSign() string
Returns the canonical call sign, excluding the portable designator.
func (qso *QSO) GetID() int32
Returns the QSO ID.
func (qso *QSO) GetMul1() string
Returns the primary multiplier.
func (qso *QSO) GetMul2() string
Returns the secondary multiplier.
func (qso *QSO) GetName() string
Returns the operator name.
func (qso *QSO) GetNote() string
Returns remarks.
func (qso *QSO) GetRcvd() string
Returns the received contest number.
func (qso *QSO) GetRcvdGroups() []string
Groups received contest numbers by regular expression.
func (qso *QSO) GetSent() string
Returns the submitted contest number.
func (qso *QSO) GetSentGroups() []string
Groups submitted contest numbers by regular expression.
func (qso *QSO) GetTime() time.Time
Returns the time of the QSO.
func (qso *QSO) Insert()
Adds the QSO record to zLog.
func (qso *QSO) Invalid()
Makes the QSO an invalid QSO.
func (qso *QSO) LoadWithoutHead(r io.Reader)
Reads QSO structure without header information.
func (qso *QSO) SetCall(value string)
Sets the call sign.
func (qso *QSO) SetMul1(value string)
Sets the primary multiplier.
func (qso *QSO) SetMul2(value string)
Sets the secondary multiplier.
func (qso *QSO) SetName(value string)
Sets the operator name.
func (qso *QSO) SetNote(value string)
Sets remarks.
func (qso *QSO) SetRcvd(value string)
Sets the received contest number.
func (qso *QSO) SetSent(value string)
Sets the submitted contest number.
func (qso *QSO) Update()
Updates the QSO record in zLog.
func (qso *QSO) VerifyBand() bool
Checks the band. Returns true if the QSO is valid.
func (qso *QSO) VerifyCall() bool
Checks the call sign. Returns true if the QSO is valid.
func (qso *QSO) VerifyDupe() bool
Checks for duplicate QSOs. Returns true if the QSO is valid.
func (qso *QSO) VerifyMode() bool
Checks the mode. Returns true if the QSO is valid.
func (qso *QSO) VerifyRcvd() bool
Checks the received contest number. Returns true if the QSO is valid.
func (qso *QSO) VerifySent() bool
Checks the submitted contest number. Returns true if the QSO is valid.
var DefaultWindowH = 640
Default window height.
var DefaultWindowW = 640
Default window width.
func NewForm(parent winc.Controller) *winc.Form
Creates a form with a dedicated class name for this plugin.
func NewPanel(parent winc.Controller) *winc.Panel
Creates a panel with a dedicated class name for this plugin.