マクロファイルの仕様
2021/05/18 05:22
文字コード
エンコーディング
Tera Term 4.102 より、Unicode (UTF-8, UTF-16BE, UTF-16LE) に対応しています。そのため、Tera Term 言語 (Tera Term Language (TTL)) で利用するマクロファイルは、次のエンコーディングで作成できます。
エンコーディング | サポート状況 | 備考 |
---|---|---|
従来どおり (ANSI CodePage) | Support | Windows 10 バージョン 1903 より前のメモ帳では標準 |
UTF-8 (with BOM) | Support | |
UTF-8 (without BOM) | Support | Windows 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 でした)