変数

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

変数

このページは Tera Term の変数について記載しています。

変数名ルール

変数名には、以下の文字が利用できます。
対象文字制限
[a-z]なし
[A-Z]なし
_(アンダースコア)なし
-(ハイフン)2文字目以降のみ
[0-9]2文字目以降のみ
上記文字の組み合わせ最大長は32文字です。
また、Tera Term が利用する変数名やコマンド名等は予約語であり、利用できません。
例:
    VARIABLE
    var-1a
    _flag
    _01-Variable

予約語

Tera Term で定義されるコマンドや演算子、一部の変数名については、ユーザが変数やラベルの名前として定義して利用することができません。
以下に、変数名として利用できない名前をリストします。

コマンド

exec や logopen 等のコマンド。
コマンド一覧 を参照してください。

演算子

and, not, or, xor

システム変数

以下は Tera Term が予約しているシステム変数と、そのシステム変数を利用するコマンドの一覧です。
バージョンによって、増減する可能性あります*1
文字列型
文字列型のシステム変数は、以下 20 個が予約されています。
名前初期値システム変数を使用するコマンド
1groupmatchstr1文字列(Null)【S】
strjoin
strmatch
strreplace
strsplit
【W】
waitregex
2groupmatchstr2文字列(Null)
3groupmatchstr3文字列(Null)
4groupmatchstr4文字列(Null)
5groupmatchstr5文字列(Null)
6groupmatchstr6文字列(Null)
7groupmatchstr7文字列(Null)
8groupmatchstr8文字列(Null)
9groupmatchstr9文字列(Null)
名前初期値システム変数を使用するコマンド
10inputstr文字列(Null)【F】
filenamebox
【I】
inputbox
【P】
passwordbox
【R】
recvln
【S】
sprintf
【W】
waitln
waitn
waitrecv
waitregex
名前初期値システム変数を使用するコマンド
11matchstr文字列(Null)waitregex
strmatch
名前初期値システム変数を使用するコマンド
12param1文字列マクロ起動時のコマンドラインパラメータ。そのうち、マクロファイル名。
13param2文字列マクロ起動時のコマンドラインパラメータのうち、param1 の次のパラメータ。
14param3文字列マクロ起動時のコマンドラインパラメータのうち、param2 の次のパラメータ。
15param4文字列マクロ起動時のコマンドラインパラメータのうち、param3 の次のパラメータ。
16param5文字列マクロ起動時のコマンドラインパラメータのうち、param4 の次のパラメータ。
17param6文字列マクロ起動時のコマンドラインパラメータのうち、param5 の次のパラメータ。
18param7文字列マクロ起動時のコマンドラインパラメータのうち、param6 の次のパラメータ。
19param8文字列マクロ起動時のコマンドラインパラメータのうち、param7 の次のパラメータ。
20param9文字列マクロ起動時のコマンドラインパラメータのうち、param8 の次のパラメータ。
名前初期値システム変数を使用するコマンド
文字列型配列
文字列型配列のシステム変数は、以下 1 個が予約されています。
名前初期値システム変数を使用するコマンド
1params[x]文字列型配列(Null)基本的には param1 ~ param9 と同じ情報が params[1] ~ params[9] に入る。
10番以降(params[10])も利用可能。
名前初期値システム変数を使用するコマンド
整数型
整数型のシステム変数は、以下 4 個が予約されています。
名前初期値システム変数を使用するコマンド
1paramcnt整数指定されたコマンドラインパラメータ数
名前初期値システム変数を使用するコマンド
2result整数0【B】bplusrecv
bplussend
【C】connect
cygconnect
checksum8file
checksum16file
checksum32file
clipb2var
crc16file
dex/macro/spec/cmd/crc32file
【D】dirnamebox
【E】exec
【F】fileconcat
filecopy
filecreate
filedelete
filelock
filereadln
fileread
filerename
filesearch
filestat
filestrseek
filestrseek2
filetruncate
fileunlock
findfirst
findnext
foldercreate
folderdelete
foldersearch
filenamebox
【G】getmodemstatus
getfileattr
getpassword
getdate
getipv4addr
getipv6addr
getspecialfolder
gettime
getttdir
getver
【I】ispassword
ifdefined
【K】kmtfinish
kmtget
kmtrecv
kmtsend
【L】loginfo
logopen
listbox
【Q】quickvanrecv
quickvansend
【R】recvln
【S】sprintf
sprintf2
str2int
strcompare
strlen
strmatch
strreplace
strscan
strsplit
setfileattr
setpassword
【T】testlink
【V】var2clipb
【W】wait
wait4all
waitevent
waitln
waitn
waitrecv
waitregex
【X】xmodemrecv
xmodemsend
【Y】ymodemrecv
ymodemsend
yesnobox
【Z】zmodemrecv
zmodemsend
名前初期値システム変数を使用するコマンド
3timeout整数0【r】recvln
【w】wait
wait4all
waitevent
waitln
waitn
waitrecv
waitregex
名前初期値システム変数を使用するコマンド
4mtimeout整数0【r】recvln
【w】wait
wait4all
waitevent
waitln
waitn
waitrecv
waitregex
名前初期値システム変数を使用するコマンド

*1 : システム変数の数は、バージョン 4.103 時点のもの。

真偽

基本方針

Tera Term マクロでは、基本的に以下の値を利用します。
数値真偽成否備考
0失敗した。
0以外成功した。例えば connect は「1 = リンクのみ OK」「2 = リンクも接続も OK」というような利用方法をしています。
ただし、追加パラメータで整数を利用する場合は 0 をデフォルトとして利用しています。
戻り値として 0 以外の整数が、基本的に "真" となっています。

例外

filecreate 等、一部のコマンドでは成否が変更することがあります。

filecreate コマンドでの result の意味は、以下の通りです。
数値意味
-1ファイルの作成が失敗した
0ファイルの作成が成功した
filecopy での result の意味は、以下の通りです。
数値真偽成否備考
0成功した。
0以外失敗した。
上記例の filecopy は「-1 = 第1引数がおかしい」「-2 = 第2引数がおかしい」というような利用方法をしています。

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

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 作成
マクロを作ろうと思っても、どういう作り方をすればいいのか、環境の勉強から始めるのは大変な労力が必要です。
あとできちんと押さえておいた方がいいのは確かなのですが、学習とは真似から入るのが効率が良いと昔から決まっています。

既存流用

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

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