ZyLO

プラグイン開発マニュアル

icon

ZyLOはWindowsで動作するコンテスト用ロギングソフトzLog令和版のプラグインを開発するためのフレームワークです。

拡張機能の利用方法

  • zLogのエンドユーザは、zLogに内蔵された設定画面を通じて、拡張機能を簡単にインストールできます。
  1. 設定メニューからプラグイン管理メニューを選び、管理画面を開く。
  2. 画面上部のリストから好きな拡張機能を選ぶと、詳細が表示される。
  3. 画面下部のボタンを押して、拡張機能を有効化・無効化・更新する。
ボタン 動作
Install 拡張機能を有効化する。押すと同時に起動する。
Disable 拡張機能を無効化する。再起動後に反映される。
Upgrade 拡張機能を最新にする。再起動後に反映される。
  • 拡張機能をテストするには、zlog.iniに拡張機能のパスをカンマ区切りで記載し、zLogを起動します。
[zylo]
DLLs=hstest.dll,yltest.dll,rttest.dll

拡張機能の開発環境

  • まず、拡張機能の開発に利用する環境に合わせて、以下のパッケージ管理システムを準備しておきます。
OS package manager
Windows choco
macOS brew
Ubuntu apt
  • 開発環境に適合するzbuildを準備します。
OS zbuild
Windows zbuild-windows.exe
macOS zbuild-macos
Ubuntu zbuild-linux
  • 最後に、以下のコマンドを実行すると、Go言語の開発環境が自動的にインストールされ、準備完了です。
> zbuild-windows.exe setup

拡張機能のビルド例

  • 以下に拡張機能の雛形を示します。専用のディレクトリを作成し、適当な名前で雛形を保存しましょう。
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 {
	// when calculate score
	return score * mults
}
  • そのフォルダでcompileコマンドを実行すると、フォルダと同じ名前で、拡張機能のDLLが完成します。
> zbuild-windows.exe compile --help
USAGE:
    zbuild compile [VER]

ARGS:
    <VER>    [default: 2.8]

> zbuild-windows.exe compile
> zbuild-windows.exe compile 2.8.3.0

得点計算の移譲方法

  • CFGファイルの末尾に、以下の項目を追記することで、そのコンテストの得点計算をDLLに委譲できます。
exit # required statement
dll rttest.dll # basename
  • 具体的には、以下の関数が、CFGファイルで指定されたDLLに対してのみ、呼び出されるようになります。
関数 機能
OnAssignEvent 得点計算の委譲時に通知される。
OnVerifyEvent 交信の得点と有効性を確定する。
OnPointsEvent 交信記録の総合得点を計算する。

高度な拡張機能の例

  • 拡張機能でWinAPIを使う場合は、GetUI関数で、zLogのGUI部品のウィンドウハンドルを取得できます。
handle := reiwa.GetUI("MainForm.FileNewItem")
  • 拡張機能は、zLogのボタン及びメニュー項目のクリックや、記入欄のキーボードの入力を監視できます。
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"))
}
  • 拡張機能は、WinAPIのGo実装を利用することで、zLogに独自の部品を追加し、イベントを処理できます。
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)
}

プロパティ操作の例

  • RunDelphi関数は、zLogのGUI部品のプロパティやメソッドをDelphiの式で参照もしくは実行できます。
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")`)
}

演算子

演算子 意味 返り値の型
+ 加算 Extended
- 減算 Extended
* 乗算 Extended
/ 除算 Extended
= 等値 Boolean
<> 不等 Boolean
< 未満 Boolean
> 超過 Boolean
<= 以下 Boolean
>= 以上 Boolean
and 論理積 Boolean
or 論理和 Boolean
not 否定 Boolean

組み込み関数

関数 意味
Int 実数を整数に変換
Put プロパティを設定
op.Int(real_value) // returns int value
op.Put(object, property_name, property_value) // returns the object

クエリを実行する例

  • zLogのマクロの内容を取得できます。CWキーボードのマクロに加え、表に掲載する変数が利用可能です。
fmt.Println(reiwa.Query("$B,$X,$R,$F,$Z,$I,$Q,$V,$O,$S,$P,$A,$N,$L,$C,$E,$M"))
変数 内容
{V} バージョン番号
{F} 編集ファイル名
{C} 自局の呼出符号
{B} 運用中のバンド
{M} 運用中のモード

拡張機能の頒布方法

  • 最初に、適当なTOMLファイルを作成し、DLLの名称に続け、リリースとチェックサムのURLを記載します。
# dll.DLL名
[dll.sample]
url = "https://example.com/releases/sample.dll"
sum = "https://example.com/releases/sample.dll.md5"
  • また、DLLに付随してCFGファイルやDATファイル等を記載できます。DLLと同様に必要事項を記載します。
[cfg.sample]
url = "https://example.com/releases/sample.cfg"

[dat.sample]
url = "https://example.com/releases/sample.dat"
  • 最後に、拡張機能の詳細な情報を記述します。この内容が、zLogの拡張機能の管理画面に表示されます。
[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"
  • 適当な管理者を選び、前掲のTOMLファイルの公開を依頼して、マーケットプレイスへの反映を待ちます。

自動リリースの設定

  • 拡張機能をGitHubで開発している場合は、以下に示すワークフローにより、リリースを自動化できます。
name: 'build'
on:
  push:
    branches:
    - 'main'
jobs:
  BuildDLL:
    runs-on: ubuntu-latest
    steps:
    - uses: nextzlog/zylo@master
      with:
        token: ${{secrets.GITHUB_TOKEN}}
        directory: /path/to/golang/files

オブジェクトの便覧

  • 以下にzLogのメイン画面のオブジェクトを列挙します。GetUI関数やRunDelphi関数で参照できます。
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 OptionsButton: TSpeedButton
      object SuperCheckButtpn: TSpeedButton
      object PacketClusterButton: TSpeedButton
      object ZServerIcon: TImage
      object panelCQMode: TPanel
      object comboBandPlan: TComboBox
  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 menuCorrectNR: TMenuItem
      object N2: TMenuItem
      object FilePrintItem: TMenuItem
      object CreateELogJARL1: TMenuItem
      object CreateELogJARL2: 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 menuSettings: TMenuItem
      object menuOptions: TMenuItem
      object menuBandPlanSettings: TMenuItem
      object menuQSORateSettings: TMenuItem
      object menuTargetEditor: TMenuItem
      object menuPluginManager: TMenuItem
    object Network1: TMenuItem
      object ConnecttoZServer1: TMenuItem
      object N6: TMenuItem
      object mnDownload: TMenuItem
      object mnMerge: TMenuItem
    object PluginMenu: TMenuItem
    object View1: TMenuItem
      object ShowCurrentBandOnly: 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 Other1: TMenuItem
  object GridMenu: TPopupMenu
    object EditQSO: TMenuItem
    object DeleteQSO1: TMenuItem
    object InsertQSO1: TMenuItem
    object N7: TMenuItem
    object GBand: 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 Changemode: TMenuItem
      object CW2: TMenuItem
      object SSB2: TMenuItem
      object FM2: TMenuItem
      object AM2: TMenuItem
      object RTTY2: TMenuItem
      object Other2: TMenuItem
    object mChangePower: TMenuItem
      object H2: TMenuItem
      object M2: TMenuItem
      object L2: TMenuItem
      object P2: TMenuItem
    object GOperator: TMenuItem
      object Clear1: TMenuItem
    object mnChangeTXNr: 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 SPCMenu: TPopupMenu
  object VoiceFMenu: TPopupMenu
    object menuVoiceEdit: TMenuItem
  object timerCqRepeat: TTimer
  object FileImportDialog: TOpenDialog

組み込み関数と変数

zylo/morse

const MIN_RELIABLE_DOT = 2

func CodeToText

func CodeToText(code string) (result string)

モールス信号の文字列を欧文に変換します。

func TextToCode

func TextToCode(text string) (result string)

欧文をモールス信号の文字列に変換します。

type Decoder

type Decoder struct {
	Iter int
	Bias int
	Gain float64
	Thre float64
	STFT *stft.STFT
}

モールス信号の解析器です。

func (*Decoder) Read

func (d *Decoder) Read(signal []float64) (result []Message)

音声からモールス信号の文字列を抽出します。 複数の周波数のモールス信号を分離できます。

type Encoder

type Encoder struct {
	Freq float64
	WPMs float64
	Rate float64
}

モールス信号の生成器です。

func (*Encoder) Tone

func (e *Encoder) Tone(code string) []float64

モールス信号の文字列を音声に変換します。

type Message

type Message struct {
	Data []float64
	Code string
	Freq int
	Life int
	Miss int
}

モールス信号の文字列です。

type Monitor

type Monitor struct {
	MaxHold int
	MaxMiss int
	Decoder Decoder
}

モールス信号の逐次的な解析器です。

func DefaultMonitor

func DefaultMonitor(SamplingRateInHz int) (monitor Monitor)

規定の設定が適用された解析器を構築します。

func (*Monitor) Read

func (m *Monitor) Read(signal []float64) (result []Message)

音声からモールス信号の文字列を抽出します。

zylo/reiwa

const (
	CW = iota
	SSB
	FM
	AM
	RTTY
	OTHER
)

QSO構造体の通信方式の列挙子です。

const (
	K1900 = iota
	K3500
	M7
	M10
	M14
	M18
	M21
	M24
	M28
	M50
	M144
	M430
	M1200
	M2400
	M5600
	G10UP
)

QSO構造体の周波数帯の列挙子です。

const ResponseCapacity = 256

問合わせの返り値の長さの限度です。

const SettingsFileName = "zlog.ini"

設定を保管するファイルの名前です。

var CityMultiList string

DATファイルを内蔵するための変数です。

var FileExtFilter string

I/O拡張機能が利用する専用の変数です。

var MinVersion = "2.8.3.0"

この拡張機能が動くバージョンです。

var OnAcceptEvent = func(qso *QSO) {
	qso.SetMul1(qso.GetRcvd())
}

有効と判定した交信に得点やマルチプライヤを設定します。

var OnAssignEvent = func(contest, configs string) {}

得点計算の権限が移譲された場合に呼び出されます。

var OnAttachEvent = func(contest, configs string) {}

コンテストを開いた直後に呼び出されます。

var OnDeleteEvent = func(qso *QSO) {}

交信記録が削除された際に呼び出されます。 修正時はまず削除、次に追加が行われます。

var OnDetachEvent = func(contest, configs string) {}

コンテストを閉じた直後に呼び出されます。

var OnExportEvent = func(source, format string) error {
	return nil
}

ZLOファイルを他の書式に変換する要求を処理します。

var OnFinishEvent = func() {}

拡張機能の終了時に呼び出されます。

var OnImportEvent = func(source, target string) error {
	return nil
}

交信記録をZLOファイルに変換する要求を処理します。

var OnInsertEvent = func(qso *QSO) {}

交信記録が追加された際に呼び出されます。 修正時はまず削除、次に追加が行われます。

var OnLaunchEvent = func() {}

拡張機能の起動時に呼び出されます。

var OnPointsEvent = func(score, mul1s int) int {
	return score * mul1s
}

総合得点を計算します。 引数は交信の合計得点と主マルチプライヤの異なり数です。

var OnVerifyEvent = func(qso *QSO) {
	ok := true
	ok = ok && qso.VerifyDupe()
	ok = ok && qso.VerifyBand()
	ok = ok && qso.VerifyMode()
	ok = ok && qso.VerifyRcvd()
	ok = ok && qso.VerifySent()
	if ok {
		OnAcceptEvent(qso)
	} else {
		qso.Invalid()
	}
}

交信の得点やマルチプライヤを検査する時に呼び出されます。 編集中の交信記録に対し、必要なら何度でも呼び出されます。 無効な交信の場合は、マルチプライヤを空の文字列にします。

var OnWindowEvent = func(msg uintptr) {}

ウィンドウメッセージを受信します。

var PluginName = ""

この拡張機能を識別できる名前です。

func AllowBand

func AllowBand(bands ...byte)

指定された周波数帯を許容します。

func AllowBandRange

func AllowBandRange(lo, hi byte)

指定された周波数帯を許容します。

func AllowCall

func AllowCall(pattern string)

交信相手の呼出符号の正規表現を設定します。

func AllowDupe

func AllowDupe()

重複交信を許容します。

func AllowMode

func AllowMode(modes ...byte)

指定された通信方式を許容します。

func AllowModeRange

func AllowModeRange(lo, hi byte)

指定された通信方式を許容します。

func AllowRcvd

func AllowRcvd(pattern string)

コンテストナンバーの正規表現を設定します。

func AllowSent

func AllowSent(pattern string)

コンテストナンバーの正規表現を設定します。

func DisplayModal

func DisplayModal(msg string, args ...interface{})

指定された文字列をダイアログで表示します。

func DisplayPanic

func DisplayPanic()

パニックを捕捉してダイアログで表示します。 例:

defer DisplayPanic()

func DisplayToast

func DisplayToast(msg string, args ...interface{})

指定された文字列を通知バナーに表示します。

func DumpZLO

func DumpZLO(qso ...QSO) (bin []byte)

QSO列をヘッダ情報付きのバイト列に変換します。

func GetINI

func GetINI(section, key string) string

指定された設定を取得します。

func GetUI

func GetUI(expression string) uintptr

指定されたウィンドウハンドルを取得します。 例:

GetUI("MainForm.FileOpenItem")
GetUI("MenuForm.CancelButton")

func HandleButton

func HandleButton(name string, handler func(int))

指定された名前のボタンにイベントハンドラを登録します。 起動時のみ登録できます。それ以後の登録は無視されます。

func HandleEditor

func HandleEditor(name string, handler func(int))

指定された名前の記入欄にイベントハンドラを登録します。 起動時のみ登録できます。それ以後の登録は無視されます。

func Query

func Query(text string) string

指定されたクエリを問い合わせます。

func RunDelphi

func RunDelphi(exp string, args ...interface{}) int

指定されたスクリプトを実行します。 zLog 2.8.3.0以降に限定の機能です。

func SetINI

func SetINI(section, key, value string)

指定された設定を保存します。

type QSO

type QSO struct {
	SRST int16
	RRST int16

	Mode byte
	Band byte
	Pow1 byte

	Score byte

	Dupe bool

	TxID byte
	Pow2 int32
}

QSO構造体です。

func LoadZLO

func LoadZLO(bin []byte) (logs []QSO)

ヘッダ情報付きのバイト列をQSO列に変換します。

func (*QSO) Delete

func (qso *QSO) Delete()

指定された交信記録をzLog側で削除します。

func (*QSO) DumpWithoutHead

func (qso *QSO) DumpWithoutHead(w io.Writer)

QSO構造体をヘッダ情報なしで書き込みます。

func (*QSO) GetCall

func (qso *QSO) GetCall() string

交信相手の呼出符号を返します。

func (*QSO) GetCallSign

func (qso *QSO) GetCallSign() string

呼出符号のポータブル表記を除く部分を返します。

func (*QSO) GetID

func (qso *QSO) GetID() int32

交信を識別する番号を返します。

func (*QSO) GetMul1

func (qso *QSO) GetMul1() string

主マルチプライヤを返します。

func (*QSO) GetMul2

func (qso *QSO) GetMul2() string

マルチプライヤを返します。

func (*QSO) GetName

func (qso *QSO) GetName() string

運用者名を返します。

func (*QSO) GetNote

func (qso *QSO) GetNote() string

備考を返します。

func (*QSO) GetRcvd

func (qso *QSO) GetRcvd() string

受信したコンテストナンバーを返します。

func (*QSO) GetRcvdGroups

func (qso *QSO) GetRcvdGroups() []string

コンテストナンバーを正規表現でグループ化します。

func (*QSO) GetSent

func (qso *QSO) GetSent() string

送信したコンテストナンバーを返します。

func (*QSO) GetSentGroups

func (qso *QSO) GetSentGroups() []string

コンテストナンバーを正規表現でグループ化します。

func (*QSO) GetTime

func (qso *QSO) GetTime() time.Time

交信が行われた時刻を返します。

func (*QSO) Insert

func (qso *QSO) Insert()

指定された交信記録をzLog側に追加します。

func (*QSO) Invalid

func (qso *QSO) Invalid()

QSOを無効な交信とします。

func (*QSO) LoadWithoutHead

func (qso *QSO) LoadWithoutHead(r io.Reader)

QSO構造体をヘッダ情報なしで読み取ります。

func (*QSO) SetCall

func (qso *QSO) SetCall(value string)

副マルチプライヤを返します。

func (*QSO) SetMul1

func (qso *QSO) SetMul1(value string)

主マルチプライヤを設定します。

func (*QSO) SetMul2

func (qso *QSO) SetMul2(value string)

副マルチプライヤを設定します。

func (*QSO) SetName

func (qso *QSO) SetName(value string)

運用者名を設定します。

func (*QSO) SetNote

func (qso *QSO) SetNote(value string)

備考を設定します。

func (*QSO) SetRcvd

func (qso *QSO) SetRcvd(value string)

受信したコンテストナンバーを設定します。

func (*QSO) SetSent

func (qso *QSO) SetSent(value string)

送信したコンテストナンバーを設定します。

func (*QSO) Update

func (qso *QSO) Update()

指定されたzLog側の交信記録を更新します。

func (*QSO) VerifyBand

func (qso *QSO) VerifyBand() bool

周波数帯を検査します。 有効な交信の場合は真を返します。

func (*QSO) VerifyCall

func (qso *QSO) VerifyCall() bool

交信相手の呼出符号を検査します。 有効な交信の場合は真を返します。

func (*QSO) VerifyDupe

func (qso *QSO) VerifyDupe() bool

重複交信を検査します。 有効な交信の場合は真を返します。

func (*QSO) VerifyMode

func (qso *QSO) VerifyMode() bool

通信方式を検査します。 有効な交信の場合は真を返します。

func (*QSO) VerifyRcvd

func (qso *QSO) VerifyRcvd() bool

コンテストナンバーを検査します。 有効な交信の場合は真を返します。

func (*QSO) VerifySent

func (qso *QSO) VerifySent() bool

コンテストナンバーを検査します。 有効な交信の場合は真を返します。

zylo/win32

var DefaultWindowH = 640

フォームのデフォルトの縦幅です。

var DefaultWindowW = 640

フォームのデフォルトの横幅です。

func NewForm

func NewForm(parent winc.Controller) *winc.Form

この拡張機能の専用のクラス名を持つフォームを構築します。

func NewPanel

func NewPanel(parent winc.Controller) *winc.Panel

この拡張機能の専用のクラス名を持つパネルを構築します。