マクロに利用できるデータ型

2021/05/22 03:51 Macro::macro 仕様

データ型

TTL が扱えるデータの型は4種類です。

ここでいうデータの型とは、変数や定数といったデータの型です。
ユーザーが定義する必要がありますが、宣言は不要です。型および値は初めて値が代入されたときに決まります。
また、いったん型が決まると違う型の値を代入することはできなくなります。

整数型

符号付き 32 bit のため、範囲としては -2147483648 から 2147483647 までです。
256 個まで使用可能ですが、浮動小数点は未サポートです。
x = 1
と定義した場合、変数 x は整数型になります。

文字列型

NUL 文字を除くすべての文字を含むことができます。
最大長は 511 文字までです。
256 個まで使用可能です。
x = '1'
と定義した場合、変数 x は文字列型になります。

文字列型変数に格納したコマンドは、そのまま実行することができません。
execcmnd のオプションとして実行してください。

整数型配列

intdim であらかじめ要素数を宣言することで、整数の配列を扱うことができます。
要素数は、以下のように最大 65536 です。

・整数型配列の要素数サンプル
intdim sample 655336
sample[0] = 1
sample[1] = 2
sample[2] = 3
sample[3] = 4
sample[4] = 5
・
・
sample[65535] = 65536
ユーザが定義可能な整数型配列は、全部で 256 個です。
各要素で扱えるデータは整数型と同じになります。

また、要素の数値は変数や式で指定することも可能です。
select = 2

intdim sample 5
sample[0] = 1
sample[1] = 2
sample[2] = 3
sample[3] = 4
sample[4] = 5

messagebox sample[select] 'intdim sample'
messagebox sample[select + 1] 'intdim sample +1'
messagebox sample[select - 1] 'intdim sample -1'
詳細は intdim を参照してください。

文字列型配列

strdimであらかじめ要素数を宣言することで、文字列の配列を扱うことができます。
要素数は、以下のように最大 65536 です。

・文字列型配列の要素数サンプル
strdim sample 65536
sample[0] = '1つめ'
sample[1] = '2つめ'
sample[2] = '3つめ'
sample[3] = '4つめ'
sample[4] = '5つめ'
・
・
sample[65535] = '最大数は 0 を含めて 65536 個'
ユーザが定義可能な文字列型配列は、全部で 255 個*1です。

各要素で扱えるデータは文字列型と同じになります。

また、要素の数値は変数や式で指定することも可能です。
select = 2

strdim sample 5
sample[0] = '1つめ'
sample[1] = '2つめ'
sample[2] = '3つめ'
sample[3] = '4つめ'
sample[4] = '5つめ'

messagebox sample[select] 'strdim sample'
messagebox sample[select + 1] 'strdim sample +1'
messagebox sample[select - 1] 'strdim sample -1'
詳細は strdim を参照してください。

*1 : Tera Term Version 4.103 現在

マクロファイルの仕様

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 でした)

マクロの作り方

2023/01/12 20:15 Macro::macro 作成
マクロを作ろうと思っても、どういう作り方をすればいいのか、環境の勉強から始めるのは大変な労力が必要です。
あとできちんと押さえておいた方がいいのは確かなのですが、学習とは真似から入るのが効率が良いと昔から決まっています。

既存流用

すでに提供されているマクロを流用する方法で新しいマクロを作るところから入りたいと思います。

次のリンクを参照してください。

Tera Term マクロとは

2024/03/26 18:31 Macro::macro 作成

Tera Term マクロとは

マクロ機能とは、別に用意されたテキストファイルに書かれたコマンド等を、上から順に 1 行ずつ解釈し、実行し、判断し、逐次進めていくタイプのインタプリタとも呼ばれるプログラム実行機能を指しますが、特に Tera Term に特化したものが Tera Term マクロです。

Tera Term 自体がネットワーク接続に用いるプログラムですが、その接続先等へ処理を追加したいときに便利なのがマクロ機能ですね。
Tera Term マクロファイルとは、Tera Term に行わせたいコマンドをそのままテキストファイルに記述したものです。
マクロファイルを指してマクロと呼ぶことも往々にしてあります。

ただ、文字列であるコマンドを逐一読み込んで処理を行うというのは、コンピュータにとって比較的コストの高い処理です。
コンピュータを使う人が、自分に使いやすいように少しの手間をかけて、多くの手間を省くような使い方をするのがマクロだと思います。

コマンドとは

Tera Term に限りませんが、実行させたい処理を小さく切り出したプログラムのことをコマンドと言っているような気がします。
直訳すると 命令 になりますが、コンピュータに行わせたい処理をひとまとめにしたプログラムと呼んだ方がしっくりきます。

たとえば、ネットワーク上のサーバに繋がるかどうかを確認するためのコマンドに ping がありますが、www.google.co.jp に ping を打つ命令……というよりは、ping での疎通確認処理と言った方がしっくりきます。

ping ならば、どのような応答が返ってくるか想像しやすいと思いますが、それを Tera Term マクロで実行させようとしたとき、ping コマンドは OS が管理しているので、OS への処理を行わせる exec というコマンドが必要になってきます。

ping コマンドは、相手から応答があったら戻り値が 0 で、無かったら 1 という挙動を示します。
この戻り値をみて、次にどう処理するのか……が、プログラムとしての腕の見せ所ですね。
たとえば、、、
・そのあとの処理を全部取りやめる?
・繋がるまで何回か繰り返す?
・それでも接続するか問い合わせる?
いずれも、ネットワーク環境によっては選ぶ可能性のある選択肢です。