TS SCRIPT TSスクリプト記述

TSスクリプトは、 実行環境TS及び、 コマンドTSCTSCALLなどで使用するスクリプトである。

スクリプトは、コマンド行、継続行、内部コマンド行、ラベル行、注釈行からなる。 継続行を除き、いずれの場合も行頭の空白は取り除いて処理する。

コマンド行

直接、コマンドラインを記述する。 丁度、MS_DOSのようなコマンドライン処理を提供している。
テキストスクリーンの1行がコマンドラインの一行に相当する。 次の行が継続行(+で始まる行)である場合は、以降の継続行を接続して一行として扱い、実行する。 コマンドラインではコマンドのパイプライン接続(|)、 入出力のリダイレクト(<>>>)機能を提供している。 詳細はここを参照のこと。

継続行

行頭に+がある行。行の先頭にスペースを書かずに+が必要である。
継続行は、コマンド行の拡張、あるいは、特定の内部コマンドに与えるデータとして使用する。

コマンド行の拡張

コマンド行の後に連続して書き、コマンド行実行の際に、コマンド行に追加して実行される。 複数の継続行が続けば、それらはひとまとめにコマンド行と扱われる。
行を繋げるとき、先行する行の行末は削除される。 継続行の行頭の+の次の文字以降が直接つながるので、 先行行の最後の文字と継続行の間を区切るためには、+の後ろにスペースを挟む必要がある。 これは、行末から次ぎの行に掛けての長いパラメータなどを入力するために決定した仕様である。

内部コマンドのデータ

現在、次の二つの内部コマンドが継続行をサポートしている。
  1. _TXT
    継続行をファイルへ直接出力
  2. _DO
    コマンドラインに継続行を標準入力として与える。
継続行は、単独では何も実行せず、制御は次の行へ移行する。

内部コマンド行

内部コマンド行は、_で始まる内部コマンドを記述する。
_で始まり、内部コマンドで無い行は、終了コマンドとして機能し、 実行を終了する。戻り値は現在の戻り値である。
継続行は、_TXT_DO以外の内部コマンド行に対しては接続されないことに注意。

ラベル行

ラベル行は、で始まる。
実行時には、何もせず、次の行へ制御を移す。 ではじまり、半角英数字、漢字、_でなるものをラベルとして扱い、 内部コマンドで分岐先として使用する。
同一のラベルが複数書かれていても、エラーにはならない。 スクリプトの先頭から探索して最初に見つかったものが該当するラベルとなる。

注釈行

注釈行は、;で始まる。
実行時には、何もせず、次の行へ制御を移す。 処理内容のメモや、解説に使用すると良い。

内部コマンド

スクリプトでは以下の内部コマンドを使用できる。

_CD dirname
ディレクトリを切替える。 切替えることが出来ない場合は、エラーを表示して、実行を直ちに終了する。
dirname!記述、@^記述が可能。
_END [ReturnCode]
この行で実行を終了する。
ReturnCode(戻り値)は自然数。 ReturnCodeを記述しないと、現在のReturnCodeを返す。
ReturnCode!記述、@^記述が可能。
_ENV envname [value]
環境変数をセットする。 valueを省略すると指定の環境変数をクリアする。
envnamevalue!記述、@^記述が可能。
_VAR envname
TSEXPRの式を計算し、環境変数にセットする。 式の計算結果が、長さ0の文字列ならば、環境変数はクリアされる。 式の型が数値の場合は、その値を表わす文字列を設定。 論理値の場合は、TRUEFALSEの文字列を設定する。
_TXT filename
以下に続く継続行を指定のファイルに出力する。
継続行の先頭の+以降を行として出力する。 継続行が連続していれば、それらをすべて出力する。
スクリプト内でコマンドに与えるパラメータやスクリプト、 あるいは初期データなどを記述する際に便利である。
filename!記述、@^記述が可能。
_DO command_line
以下に続く継続行をコマンドラインの標準入力として実行する。
継続行の先頭の+以降を行として入力する。 継続行が連続していれば、それらをすべて入力する。
_HERE command_line
このコマンドはきわめて特殊で、 以下に続く全ての行をコマンドラインの標準入力として実行する。
実行後スクリプトは必ず終了する。 通常は使用しない。
_GOTO :label
指定のラベルに移動する。ラベルはスクリプトの先頭から探索する。 従って、複数のラベルを記述すると最初のラベルが移動先となる。 ラベルが見つからない場合は、エラーを表示して、実行を直ちに終了する。
ラベルの先頭の:は省略できないことに注意すること。
_FOWARD :label
現在位置から後方(行番号の増える方向)へ探索し、最初に見つかったラベルへ分岐する。 ラベルが見つからない場合は、エラーを表示して、実行を直ちに終了する。
ラベルの先頭の:は省略できないことに注意すること。
_BACKWARD :label
現在位置から前方(行番号の減る方向)へ探索し、最初に見つかったラベルへ分岐する。 ラベルが見つからない場合は、エラーを表示して、実行を直ちに終了する。
ラベルの先頭の:は省略できないことに注意すること。
_IF 条件 { END | SKIP [行数]| GOTO :label | FORWARD :label | BACKWARD :label }
条件が成立すると、サブコマンドを実行する。

サブコマンド

  1. END [戻り値(数値)]
    スクリプトの実行を終了する。戻り値を指定すればそれがスクリプトの戻り値となる。
  2. SKIP [行数(数値)]
    指定の行数だけ読み飛ばす。行数を省略すると1行の読み飛ばし。
  3. GOTO :label
    スクリプトの先頭から探索し、最初に見つかったラベルへ分岐する。
  4. FORWARD :label
    現在位置から後方(行番号の増える方向)へ探索し、最初に見つかったラベルへ分岐する。
  5. BACKWARD :label
    現在位置から前方(行番号の減る方向)へ探索し、最初に見つかったラベルへ分岐する。
ラベルが見つからない場合は、エラーを表示して、実行を直ちに終了する。
ラベルの先頭の:は省略できないことに注意すること。

条件

条件の記述法は三通り用意されている。
  1. TSEXPRによる条件記述
    計算式を括弧で囲むと計算式を評価して、条件判断を行う。
    _IF ( ) .....
  2. TSFXPRによる条件記述
    計算式を中括弧で囲むと計算式を評価して、条件判断を行う。
    _IF { } .....
  3. 直接条件記述
    条件の先頭が括弧でなければ、直接条件記述として扱う。
    _IF [NOT] 条件要素 ....

TSEXPRによる条件記述

()で囲んだTSEXPRを評価する。
戻り値は論理型であること

TSFXPRによる条件記述

{}で囲んだTSFXPRを評価する。
戻り値は論理型であること

直接条件記述

NOTは条件を反転する。条件要素は以下の通り。
TRUE
常に成立
FALSE
常に不成立
EXIST filename
指定のファイルが存在すれば成立
ISDIR dirname
指定のディレクトリが存在すれば成立
ISDRIVE drivename
指定のドライブが存在すれば成立
ISREADY drivename
指定のドライブがレディ状態ならば成立
ISENV envname
指定の環境変数が存在すれば成立
数値比較 数値1 演算子 数値2

数値

整数値 整数の値
RESULT 直前のコマンドラインの戻り値。 コマンドラインが複数のコマンドで構成される場合は、 最後のコマンドの戻り値。
コマンドの戻り値は、通常は、成功したら1、不成功ならば0が戻る。 コマンドによっては戻り値に意味がある場合もある。

演算子

=等しい
==等しい
!=等しくない
>数値1が数値2より大きい
>=数値1が数値2以上
<数値1が数値2より小さい
<=数値1が数値2以下

数値には数式をサポートしていないので、専ら、 RESULTの結果を調べるのに用いる。

文字列比較 文字列1 演算子 文字列2

文字列

引用符('")で囲まれた文字列。
引用符中に引用符を書く場合は引用符を二つ重ねる。

演算子

=等しい
==等しい
!=等しくない
_PATH path
パス(環境変数PATH)を設定する。 path!記述、@^記述が可能。
_ADDPATH {path}*
パス(環境変数PATH)を追加する。 pathは一つ以上書く。pathが既に存在すれば追加しない。 path!記述、@^記述が可能。
_RESULT
現在の戻り値を環境変数TS_RESULTに設定する。 この値は、現在のスクリプトより上位からは見ることが出来ない。

内部コマンド中のTSEXPR

  1. SYS関数は使用できない
  2. FXPR関数を使用できる。
  3. RESULTにはスクリプトの現在のRESULTが入っている

内部コマンド間接展開

いくつかの内部コマンドは、コマンドライン記述、すなわち、!記述、@記述、^記述が可能となっている。
このとき、TSEXPRを使用した場合(!^)と、引数置換機能(!=)を利用した場合、TSFXPR機能を利用できる。