マクロファイルの仕様

2021/05/18 05:22 Macro::macro 仕様

文字コード

エンコーディング

Tera Term 4.102 より、Unicode (UTF-8, UTF-16BE, UTF-16LE) に対応しています。

そのため、Tera Term 言語 (Tera Term Language (TTL)) で利用するマクロファイルは、次のエンコーディングで作成できます。
エンコーディングサポート状況備考
従来どおり (ANSI CodePage)SupportWindows 10 バージョン 1903 より前のメモ帳では標準
UTF-8 (with BOM)Support
UTF-8 (without BOM)SupportWindows 10 バージョン 1903 以降のメモ帳では標準
UTF-16BE (without BOM)Not support
UTF-16LE (without BOM)Not support
UTF-16 (with BE BOM)Support
UTF-16 (with LE BOM)Support
UTF-16 (without BOM = UTF-16BE)Not support

※ 上記は Tera Term のヘルプからそのまま抜粋しており、「従来どおり (ANSI CodePage)」は、文字コードとして Shift JIS (Windows の標準) で作ることを意味していると思われます。

※ Windows 標準のメモ帳は Windows 10 バージョン 1809 から上記エンコーディングでの保存が可能になっています。

BOM とは

Byte Order Mark の略で、Unicode 符号化形式で符号化したテキストファイル先頭につける、数バイトのバイナリデータのことです。
バイナリデータなので、シェルスクリプトを作るときには考慮しなければならなかったりするのですが、今後の Tera Term 言語では基本的に無視しても良い事項のようです。

また、BOM がある場合はその内容からきちんと符号化形式を判定してくれるとのことで、積極的に使った方が良いようです。
BOMがない場合は UTF-8 として読み込み、UTF-8 としてデコードできなかった場合に CP_ACP(4.102より前と同じ) として読み込まれます。

Tera Term マクロでファイルの BOM を判別する場合のサンプルスクリプト(0186)を作成しましたので、参照してみてください。

改行

マクロファイルに利用すべき改行コードは CR + LF(Windows 標準)です。

CR、LF の ASCII コードは以下の通りです。

CR = #13
LF = #10

※ なぜこう書くのか、詳細は ASCII コード を参照してください。

ログファイルに改行文字を書き込む場合にも、必ず CR + LF にしてください。
logwrite 'abc'#13#10
もしくは
logwriteln 'abc'

また、ホストとのやり取りでも CR + LF を指定します。
(実際にホストへ送られる改行文字は Tera Term の設定により決まります)

行単位の処理系

行の形式は 4 つに分類できます。

どの行も ";" 文字で始まるコメントを含むことができます。
1つの行は、最大 1023 文字までが有効で、1023 文字を越える部分は無視されます。
また、C言語風コメント(/* ~ */)も使用可能です。
コメントは MACRO の実行に影響を与えません。

代入行

変数に、整数もしくは文字列を代入する行です。
書式:
    <変数> = <定数、変数、式>
例:
x = 1
x = '1'

代入の祭、文字列 = の左右にスペースを入れても入れなくても同じ処理が行われます。

コマンド行

1 つのコマンド名と、0 個以上のパラメータからなる行です。
書式:
    <コマンド> <パラメータ> ...

例:
    connect 'myhost'
    wait 'OK' 'ERROR'
    if result=2 goto error
    sendln 'cat'
    pause A*10
    end

空白行

文字がない行や空白文字 (space または tab)やコメントだけの行です。
MACROの実行に影響をあたえません。
例:
    ; Tera Term Language
    showtt 0 
    MessageBox 'message 1' 'title 1' 
    /* This is 'comment' "string" 
    */ MessageBox 'message 2' 'title 2'
    closett

ラベル行

":" とその直後に続くラベル名からなる行です。

1行ずつ解釈して実行するマクロですが、goto コマンドで解釈する行をラベル行に移動させることができます。
また、サブルーチンの始まり行として call コマンドでも解釈する行をラベル行に移動させることができます。

Tera Term では、ラベルを利用した処理行の移動という性質からか、call コマンドによるサブルーチンの実行に引数を与えることができません。
書式:
    :<Label>

例:
    :dial
    :100
ラベルの存在が MACRO の実行にあたえる影響としては、処理する行の移動対象として働きます。
以下の例であれば、:skip へ処理が移動します。
goto skip

messagebox 'スキップされずに表示されましたか?' 'message'

:skip

messagebox 'スキップされてこちらのみ表示されましたか?' 'message'
ただし、ラベル行自体が何かを処理するものではありません。
そのため、以下のように処理を行うと、ラベル行の有無に関係なく処理が実行されます。
messagebox 'スキップされずに表示されていますか?' 'message'

:skip

messagebox 'ラベル行に関係なく表示されましたか?' 'message'
マクロで使用できるラベルの個数は、Tera Term バージョン 4.27 以降 512 個です。
(バージョン 4.26 以前は 256 でした)