Tera Term用のマクロ言語「Tera Term Language(TTL)」の文法とドキュメント
Tera Term用のマクロ言語は「Tera Term Language(TTL)」と呼ばれている。文法や利用できるコマンドの一覧についてはドキュメントを参照してほしいが、基本的には処理したいコマンドを1行に1つづつ順番に記述していく、というものになっている。もちろん変数も利用可能だ。
TTLはさまざまなコマンドや制御構文を備えているが、まず覚えておきたいのが変数の代入と文字列の連結だ。変数への代入は、「<変数名> = <値>」という形で行える。なお、文字列を代入する場合は文字列を「"」もしくは「'」で囲む必要がある。
たとえば変数var1に「hogehoge」という文字列を、変数var2には12345という数値をセットするには、以下のようにする。
var1 = 'hogehoge' var2 = 12345
そのほか、TTLの文法を簡単にまとめると次のようになる。
- マクロファイル中の「;」から行末まではコメントとなり無視される
- 空白(スペース、タブ)だけで構成される行は無視される
- 「:」から始まる行はラベルとなる。ラベルは「goto」や「call」コマンドなどで使われる
- 変数の宣言は不要(変数への代入が宣言の代わりとなる)
- 変数名/コマンド名の大文字/小文字は区別されない
- TTLで扱える値は整数(32bit符号付き)および文字列の2種類
- 文字列の最大長は255文字
- 変数名の1文字目はアルファベット(A〜Z、a〜z)および「_」。2文字以降はこれに加えて数字も利用可能。変数名の最大長は32文字
- ラベル名には英数字(A〜Z、a〜z、0〜9、_)が利用可能。最大長は32文字
- 利用できる演算子はC言語とほぼ同じ。ただし、「=」は比較にも利用できる(演算子「==」と同義)
TTLの制御コマンド
TTLではifやfor、whileなど、条件分岐やループを行う制御コマンドが用意されている。詳しくはTTLコマンドリファレンスを参照して欲しいが、よく使われると思うものは以下のとおりだ。
if〜then〜elseif〜else〜endif(条件分岐)
TTLでは、ifコマンドで条件分岐を行える。ifの後に続く条件式が真(0以外)なら、続くendifの間までに記述されたコマンドが実行される。また、elseifを使ってさらに条件分岐を行ったり、elseで条件が偽の場合の処理も記述できる。使用例は以下のとおりだ。
; if〜elseif〜else〜endifによる条件分岐 a = 1 if a = 1 then ; aが1の場合 b = "hogehoge" elseif a = 2 then ; aが2の場合 b = "foo" elseif a = 3 then ; aが3の場合 b = "foobar" else ; aがそれ以外の場合 d = "" endif
for(ループ)
forコマンドは、C言語スタイルのforループを実装するコマンドである。forコマンドは制御変数、初期値、終了値という3つの引数を取る。
; forループ for n 1 10 ; for〜nextまでの処理を、n=1からn=10まで計10回繰り返す send 'a' ; "a"という文字を送信する next
while(ループ)
forのほか、whileによるループも使用可能だ。whileに続く条件式が真の間、endwhileまでの処理を繰り返す。
; whileループ n = 1 while n < 11 ; 上記のfor〜nextループと同等のものをwhileで書いたもの send 'a' n = n + 1 endwhile
gotoによるジャンプ
そのほか、マクロ中の特定の位置にジャンプするgotoコマンドも用意されている。
; gotoによるジャンプ if b = "foobar" goto :END ; ラベル「END」にジャンプする <適当な処理> :END ; ラベル「END」
callによるジャンプ
TTLではユーザーが独自のコマンドを実装する機構は用意されていないが、ラベルとcall/returnコマンドを用いることで、サブルーチンを用意できる。callコマンドはgotoコマンドと同様に指定したラベルにジャンプするものだが、ジャンプ後にreturnコマンドを実行することで、callを呼び出した次の行に再度制御を移すことが可能な点が異なる。
; callによるジャンプ if b = "foobar" call :SUB ; ラベル「SUB」にジャンプする <適当な処理> :SUB ; ラベル「SUB」 send 'a' send 'b' send 'hogehoge' return ; このサブルーチンから抜け、呼び出し元(call :SUB)の次の行に実行を移す
TTLのコマンド
TTLでは多くのコマンドが用意されているが、最後によく利用されると思われるコマンドを紹介しておこう(表1)。詳細についてはTTLコマンドリファレンスを参照して欲しい。
| コマンド名および引数 | 意味 |
|---|---|
| connect <パラメータ> | パラメータで指定したホストに接続する。パラメータは文字列で指定する |
| send <文字列もしくは整数> | 指定した文字列を送信する。整数が指定された場合はその下位バイトをASCIIコードと見なして対応する文字を送信する |
| sendln <文字列> | 指定した文字列に改行文字を付加して送信する |
| logopen <ファイル名> <バイナリフラグ> <追加フラグ> | 指定したファイルにログを記録する。バイナリフラグが0の場合、改行文字は変換され、エスケープシーケンスは無視される。1の場合、ホストから送信された内容がそのままログに記録される。追加フラグは0なら既存のファイルに追加、1ならファイルを新規作成して上書き |
| wait <文字列> | 指定した文字列がホストから送られるまで待機する |
| strconcat <変数名> <文字列> | 指定した変数内の文字列の末尾に指定した文字列を連結する |
| strmatch <文字列> <正規表現> | 正規表現マッチを行い、マッチすればシステム変数resultに1を、そうでなければ0をセットする |
| sprintf2 <変数名> <フォーマット文字列> <引数>... | 引数をフォーマット文字列で指定した形でフォーマットし、指定した変数に格納する |
