もくじ
秀Term for Windows Version 2.18

　　スクリプト索引

　　基本解説	変数の使い方	式について

　　関数について	演算子について

　　基本系

wait	send

sendwrap

timeout, millitimeout

sleep, millisleep

getchar	getline

waitchatinput

　　スクリプト流れ制御系

if	beginloop

switch	loopswitch

while	call, callvarlabel

return	hangup

exit	closehideterm

error	connect

goto	checklabel

　　設定系

keyboard	setup

title	chat

sethilight	port

keyassign	afterhangup

ime	endscroll

getchat	setchat

setautohangup	gethostname

display

setportno

sound	setchatfiler

font

　　ファイル転送系

log	upload

download	sendclipbrd

　　メッセージ系

message	question

timeoutmessage	timeoutquestion

input, secretinput

inputfilename

menu, numbermenu

addmenu, addnumbermenu, showmenu

debuginfo

　　ファイル系

chdir	restoredir

openfile	createfile

appendfile	readfile

writefile	closefile

delfile	copyfile

renamefile

getini	putini

createtempfile

getwindir, getwinsysdir, getcurrentdir, gethidetermdir

　　ＤＤＥ系

ddeinitiate	ddeterminate

dderequest	ddeexecute

ddepoke

　　その他

readbuffer	writebuffer, writebuffer2

writelog

sendbreak	play

getdate	gettime	getweek

datetolinear

run, runsync,runsync2	savebuffer

window	getversion

clearbuffer


基本解説

　秀Termのスクリプトは、ホストとの会話を自動的に行うために用意されています。以下のような分野への利用にとても便利です。

－　オートログイン。電話がつながった後にユーザＩＤやパスワードを自動的に入力したり、各種VANサービスとの対話に用いる。

－　電話の自動切断。ホストが電話を自動的に切ってくれない場合に、ログオフ時にホストが送ってくる文字列を識別してそれにより電話を自動的に切る。

－　会議室の自動巡回。毎日巡回する会議室を自動巡回し、ログに落としたり、さらにそのあとMLTOI等のログブラウザを起動する。

－　その他、日常通信業務の自動化。

　スクリプトファイルは一般のテキストエディタを用いて作成してください。拡張子は.SCRにしてください。秀丸エディタなんかがお勧めです(^^;

　会議室の自動巡回等の高度なスクリプトは作るのがとても大変ですので、パワーユーザの方々の優秀な作品をご利用いただくのが便利です。

　スクリプトのコマンドは１行に１つだけ指定出来ます。コマンドにはパラメタ（引数）が付くものもあります。

　複数のパラメタを指定する場合は、それらをコンマで区切ります。ただし、一部空白で区切る場合もあります。

　パラメタの数が多い場合は、行末に「\」を付けて複数行にまたがって記述することができます。

　例：

　　wait "ABC", "DEF", "GHI", \

　　　　"JKL", "MNO"

　コマンドには終了コードを持つものがあります。終了コードはその後に条件判定文を組み合わせることによっていろいろな処理に応用できます。

　例：

　　menu "ABC", "DEF"

　　if( result == 0 ) goto Abc

　セミコロンが現れると、その位置からその行のおわりまではコメントとみなされます。

　スクリプトの中で指定できる文字列（ダブルクォーテーションで囲むもの）は長さが２５０文字を越えないようにしてください。それより長い文字列は指定できません。

　コマンドは、大文字でも小文字でもかまいません。

　スクリプトの基本は、「ホストから文字列を受け取り、それに対する処理をする」のくり返しになります。まずはこの手順をマスターしましょう。


変数の使い方

　秀Termでは、変数を使うことができます。変数は、任意の文字列または数値を記憶することができます。

　秀Termの変数には、「永久的変数」と、「一時的変数」と「グローバル変数」の２種類があります。永久的変数は秀Termを終了しても永久に記憶されます。グローバル変数と一時的変数はスクリプトの実行を終了した時点で消えてしまいます。

　グローバル変数は、いわゆるグローバルな変数ですが、一時的変数はサブルーチンの中だけでローカルな変数です。

　さらに特別な変数として、パスワード変数というのがあります。これは、基本的には永久的変数と同じですが、変数の内容が他からは簡単に参照できない変数です。したがって、パスワード等の他人に知られたくないような情報を記憶するのに便利です。

　永久的変数およびパスワード変数は、文字列のみを記憶することができます。一時的変数は、数値または文字列を記憶することができます。

　変数は、先頭に「これは変数である」ということを表す記号が付きます。その記号によって、変数の種類が決まります。先頭の記号は以下のとうりです。

　　%  ... 永久的変数（文字列）

　　%% ... パスワード変数（文字列）

　　#  ... 一時的変数（文字列）

　　## ... 一時的変数（数値）

　　@  ... グローバル変数（文字列）

　　@@ ... グローバル変数（数値）

　なんか統一が取れてない規約ですが、バージョンアップする際に以前の版との互換を取るためこうなってしまいました。m(_._)m

　変数の名前は、適当でかまいません。漢字も使えるはずです。ただ、変数名の長さは３０文字程度までにしてください。変数名では大文字／小文字が区別されません。例えば、#aと#Aは同じ変数とみなされます。ちなみに#aと##aは別の変数となります。

　変数に値を代入するには、=を使います。=の左側に変数名、右側が式です。

　例：　#a = "ABC"

　　　　##a = ##a + 1

　文字列変数に記憶できる文字列の長さは1023文字までです。それ以上は切り捨てられます。数値変数は４バイトで表現可能な値を記憶することができます。負の数も記憶できます。文字列変数よりも数値変数の方が効率がいいのでなるべく数値で表現可能なものは数値変数を使うことをお勧めします。

　グローバル変数や永久的変数は、すべてのスクリプトからアクセスできる反面、他のスクリプトがたまたま同じ名前の変数を使うと古い内容が上書きされてしまいます。したがって、あまり簡単な名前を付けないよう心掛けてください。

配列の使い方

　Version2.00から配列が使えるようになりました。変数名の後ろに角カッコで配列の番号を指定してやるだけで配列変数が使えます。

　例；

#a[0] = "A"

#a[1] = "B"

#a[##b] = "C"

message #a[ 1 + 2 + ##c ]

　角カッコの中は数値でなければいけません。文字列を指定するとエラーとなります。

　角カッコを連続させることにより、２次元以上の配列も作れます。

　例；

#a[0][0] = "A"

#a[0][1] = "B"

　式については「式について」を参照してください。


式について

　式は、変数に値を代入したり、各種コマンドのパラメタとして頻繁に用いられます。

　式には、文字列の式と数値の式があります。文字列と数値を両方入れると、数値は文字列との演算のタイミングで文字列に変換されます。

　文字列でなければならない所に数値が指定された場合も、文字列に自動的に変換されます。

文字列の式

普通の文字列は、ダブルクォーテーションで囲んで指定します。

"ABC"

"斉藤秀夫"

　制御文字は^とA～Zで指定するか、または^0と２桁の１６進数で指定します。ダブルクォーテーションマークや^そのものも^といっしょに指定します。

"^M"     (改行コード、０Ｄｈ）

"^^"    （^そのもの）

"^01B"  （エスケープ文字）

"MAIL^M"  （MAILリターン）

　文字列は、+で連結することができます。また、文字列変数とも連結できます。- * / %の演算子は文字列変数に対して使うことはできません。

#a = "ABC" + "DEF"

#a = #a + "^M^J"

その他、part search drop等の文字列操作の関数があります。

数値の式

まずは、普通に数が指定できます。負の数もいちおう使えます。

##a = 1

##a = -2

+ - * / % の演算が出来ます。%はあまりの計算です。これらの演算子は優先順位がみな同じなので、必要に応じて括弧で囲んでください。

##a = (##a + 1) * 100

負の数を式の中に記述する場合は括弧で囲んでください。（すんません）

##a = 1 + 3 * (-3)

数値の式の中に文字列が現れると、秀Termは数値を文字列に変換してしまいます。例えば、1という値は"1"という文字列に変換されます。変換された後は文字列として演算されます。

#a = 1 + "A"    ; 1Aという文字列になる

　数値変数に文字列を代入すると、自動的に数値に変換されます。変換不能な場合は０が代入されます。

##a = "1" + "2"    ; ##aには12が代入される

　他、強制的に数値に変換するにはvalue関数を使います。

関数について


演算子について

　数値型の式の中では、＋、－、＊、／、％の５つの演算子が使えます。＋は足し算、－は引き算、＊は掛け算、／は割り算、％は割ったあまりを計算します。

　これらの演算子には優先順位はありません。必要に応じて括弧で囲ってください。

　文字列型の式では、＋の演算子だけが使えます。これは、文字列を連結します。

　if文やwhile文などの条件判定の中では、さらに以下のような条件判定用の演算子が使えます。

式1 == 式2	... 式1の値と式2の値が等しい

式1 != 式2	... 式1の値と式2の値が等しくない

式1 > 式2	... 式1の値が式2の値より大きい

式1 >= 式2	... 式1の値が式2の値より大きいか等しい

式1 < 式2	... 式1の値が式2の値より小さい

式1 <= 式2	... 式1の値が式2の値より小さいか等しい

not 条件1	... 条件式1の結果の意味を逆にする

条件1 or 条件2	... いわゆるオア演算子

条件1 and 条件2	... いわゆるアンド演算子

　条件判定用の演算子は、「+ = * / %」よりも優先順位が低くなっています。さらに、or and notの演算子は他の演算子よりもさらに優先順位が低くなっています。

　条件判定した結果を変数に代入する場合は文字列型の変数を使ってください。

例：

#a = #result == "ABC"

if( #a ) error "ABC"


waitコマンド
wait

　waitコマンドは、ホストから特定の文字列が送られてくるのを待ちます。待つ文字列はコンマで区切って複数指定することができます。

例：

wait "ABC"	; ABCを受信するまで待つ

wait "ABC", "DEF", "GHI"	; ABCまたはDEFまたはGHIを受信するまで待つ

　複数指定した場合は、それらのどれか１つを受信するとwaitから抜け出ることになります。

　timeoutまたはmillitimeoutでタイムアウトが設定されている場合は、その時間が経過すると文字列を受信する前にwaitから抜け出ます。

　waitは終了コードとして、タイムアウトした場合は「timeout」、指定された文字列を受信して終了した場合は、その番号（先頭が１）を返します。復帰値を使ってif文等で処理を分岐することもできますが、その場合にはswitch文の方が便利ですのでtimeoutかどうかの判定だけに利用することをお勧めします。

例：

timeout 10

wait "ABC", "DEF"

if( timeout )

; timeout時の処理

else

; "ABC"または"DEF"を受信した時の処理

endif

　waitで指定する文字列の前に、postidleまたはpostmilliidleオプションを付けると、その文字列を受信してから指定された時間だけ「何も受信しないこと」を確認してからwaitから抜け出ます。

例：

wait postidle(1) "＞"

wait "ABC", postidle(2) "DEF", postmilliidle(500) "GHI"

　postidleは秒単位で、postmilliidleはミリ秒単位です。括弧の中には数値を指定してください。

　postidle, postmilliidleオプションは、例えば、NIFTY-ServeのMREコマンドを実行した際に、MREが終了したかどうかの判定等に使います。MREが終了すると、プロンプトとして「＞」や「CCS(N)>」が送られてきますが、単に

wait "＞", "CCS(N)>"

としたのでは、例えば会議室の発言の中に「＞」が含まれているだけで間違えてMREの終了とみなしてしまいます。そこで、

wait postidle(1)"＞", postidle(1)"CCS(N)>"

としておけば、確実にMREコマンドの終了を検出することができます。

　waitで指定する文字列が長いためにスクリプトが読みづらくなる場合は、\マークを使ってwaitを複数の行にまたがって記述することもできます。行末に\マークを付けて改行を入れて記述ください。

例：

wait "秀Term Version1.23", \

     "斉藤秀夫", \

     postidle(1) "CCS(N)>"

　postidleまたはpostmilliidleの後ろの文字列に""を指定すると、「何も受信しないこと」を検出するような使い方ができます。例えば「ホストから１０秒間何も文字を送ってこなかった」ということを検出するには、wait postidle(10) ""とすればいいです。


sendコマンド
send

　sendコマンドは、パラメタで指定された文字列を送信します。キーボードから文字を入力するのと同じ働きをします。

例：

send "MRE ROOM:2^M"


sendwrapコマンド
sendwrap

　sendwrapコマンドは、パラメタで指定された文字列を「無手順アップロード」と同じ方法で送信します。無手順アップロードの際には、「設定・プロトコル」で指定された通りの自動折り返しや禁則処理が施されて送信されます。

　このコマンドは終了コードとして実際に送信した行数を返します。このコマンド自体は送信するだけなので必要に応じてスクリプト側で同期を取ってください。

例：

sendwrap #a

##line = result

while( ##line > 0 )

    wait "^M^J"

    ##line = ##line - 1

endwhile


timeout,millitimeoutコマンド
timeout, millitimeout

　timeout, millitimeoutコマンドは、waitコマンド、switchコマンド、loopswitchコマンドでのタイムアウトの設定／解除を行います。timeoutは秒単位、millitimeoutはミリ秒単位（1ミリ秒は1/1000秒）で指定します。

例：

timeout 10

millitimeout 1500

タイムアウトを解除するには、０を指定します。

例：

timeout 0

　タイムアウトが設定されていると、waitコマンドやloopswitchコマンドは、timeoutで指定された時間だけ待っても文字列を受信しなかった場合に強制的に抜け出てしまいます。

　タイムアウトにより強制的に抜け出た場合、そのコマンドの終了コードは「timeout」となります。

例：

timeout 10

wait "Enter User-ID:"

if( timeout ) error "タイムアウト発生"

　タイムアウトが解除されている場合はwait等のコマンドは文字列を受信するまで永久に待ち続けます。

　スクリプトの実行を開始した時点ではタイムアウトは解除されています。

　callした後はタイムアウトが不定な場合が多いので、callの後や、サブルーチンの先頭では一度タイムアウトを設定しなおすのがいいでしょう。


sleep,millisleepコマンド
sleep, millisleep

　sleep, millisleepコマンドは、指定された時間だけスクリプトの実行を凍結させます。ただし、ホストとの対話その他の処理は通常通り続行されます。

sleepは秒単位、millisleepはミリ秒単位です。（１ミリ秒は1/1000秒です）

　waitやsleep以外のコマンドを実行している最中は、秀Termは通信ポートからの受信を行いません。また、ＣＰＵを独占して使うことになります。長いループ等で処理にとても時間がかかる場合は、所々にmillisleepを入れてあげてください。１ミリ秒で十分です。

例：

millisleep 1


getcharコマンド
getchar

　getcharコマンドは、通信ポートから１文字受信するまで待ち、受信した文字を変数に代入します。全角文字も正しく（２バイト）受信します。

　パラメタで変数の名前を指定します。数値変数は指定できません。

　受信した内容は秀Termのウィンドウにも表示されます。

例：

getchar #a

　タイムアウトの場合は、変数には""が代入されgetcharは終了し、終了コードは「timeout」になります。


getlineコマンド
getline

　getlineコマンドは、通信ポートから１行受信するまで待ち、受信した文字列を変数に代入します。

　行の最後の0Ahの制御文字（ラインフィード）は除去されますが、0Dhの制御文字（キャリッジリターン）は除去されずに変数に格納されます。

　パラメタで変数の名前を指定します。数値変数は指定できません。

　受信した内容は秀Termのウィンドウにも表示されます。

例：

getline #a

　タイムアウトの場合は変数には""が代入され、getlineは終了し、終了コードは「timeout」になります。


waitchatinputコマンド
waitchatinput

　waitchatinputコマンドは、チャット行への入力を待ち、入力された文字列をパラメタで指定された変数に格納します。チャットモードでない場合でも、通信ポートの設定でローカル編集がｏｎの場合は、ローカル編集の所からの入力を待ちます。

　パラメタで変数の名前を指定します。数値変数は指定できません。

　チャットモードでもローカル編集ｏｎでもない時にこのコマンドを実行すると自動的にチャットモードになります。また、waitchatinput実行中にユーザがチャットモードを解除しようとするとwaitchatinputは終了し、変数には""が代入されます。

　チャット行で入力された内容は秀Termのウィンドウには表示されません。また、送信もされません。

例：

waitchatinput #a


if文
if

　if文は、waitコマンド、questionコマンド等の終了コードや、各種の条件によって処理を振り分けます。

　ifの後には、条件を括弧で囲んで指定し、さらに、その後ろまたは次の行に条件成立の場合のコマンドを書きます。次の行に書く場合は最後にendifが必要です。

例：

if( #a == "ABC" ) error "Error"   ; １行の例

if( #a == "ABC" )                 ; endif付き

    message "ABC"

    goto ErrorCase

endif

　条件が成立しなかった場合の処理を記述するには、elseを使います。

例：

if( timeout ) message "TIMEOUT"  ; １行の例

else message "NOT TIMEOUT"

if( #a == "ABC" )                ; 複数行の例

    wait "ABC"

    send "DEF"

else

    message "NORMAL"

endif

　１行のif文と複数行のelseを組み合わせるのはさけてください。正常な判定ができなくなる恐れがあります。

悪い例：

if( timeout ) message "TIMEOUT"

else

    send "a";

    sleep 1;

endif

　複数行のifの中に１行のif文を入れると、その後のelseの判定がくるってしまうことがあります。if文を入れ子にする場合は必ず複数if文（endif付きのif文）にしてください。

悪い例：

    if( ... )

        ...

        ...

        if( ... ) ...

    else

        ...

        ...

    endif

正しい例：

    if( ... )

        ...

        ...

        if( ... )

            ...

        endif

    else

        ...

        ...

    endif

ifの条件が成立しなかった場合に、さらにもう一度ifで判定したい場合は、elseifを使うのが便利です。

例：

if( ##a == 1 ) message "1"       ; 1行の例

elseif( ##a == 2 ) message "2"

elseif( ##a == 3 ) message "3"

else message "その他"

if( ##a == 1 )                  ; 複数行の例

    message "1"

    goto NifExit

elseif( ##a == 2 )

    message "2"

    goto NifExit

endif

　条件式には以下のものがあります。

yes     ... questionコマンドで「はい」の場合

no      ... questionコマンドで「いいえ」の場合

enter   ... inputコマンドで「確定」の場合

cancel  ... inputコマンドで「取消」の場合

timeout ... wait等でタイムアウト発生時

式1 == 式2 ...式1と式2が等しい

式1 != 式2 ...式1と式2が等しくない

式1 <  式2 ...式1が式2より小さい

式1 <= 式2 ...式1が式2より小さいか等しい

式1 >  式2 ...式1が式2より大きい

式1 >= 式2 ...式1が式2より大きいか等しい

　これらはandやorで組みあわせたり、括弧で囲んだりすることができます。andは両方の条件が成立した場合に成立となり、orはどちらか片方が成立してれば成立となります。

例：

if( ##a == 10 and ( #b == "A" or #b == "" ) )

　条件の前にnotを付けると逆の意味となります。

例：

if( not timeout ) error "Error"


beginloop-endloop文
beginloop-endloop

beginloopとendloopで囲まれた処理は、無限に繰り返されます。

例：

beginloop

    play "o4cdefgo5abc"

    sleep 10

endloop

ループを途中で抜け出るためにはbreakloopを使います。

例：

timeout 10

beginloop

    send "^M"

    wait "A"

    if( timeout ) breakloop

endloop

ループの中の途中でループの先頭に戻りたい場合には、loopagainを使います。

例：

beginloop

    send "^M"

    wait "A"

    if( timeout ) loopagain

    send "ABC"

endloop

無限ループを作ると最悪の場合Windowsがハングするので注意しましょう。


switch-case-endswitch文
switch-case-endswitch

　ホストから送られてくる文字列によって処理を振り分けたい場合に、この３つを組み合わせて処理を行います。

　switchとendswitchの間に、caseで振り分けに使う文字列を複数指定します。

例：

switch

case "A"

    message "Aを受信"

case "B"

    message "Bを受信"

endswitch

　この場合、"A"を受信した場合は"Aを受信"と表示し、"B"を受信した場合は"Bを受信"と表示します。タイムアウトの場合は何もせずに次に進みます。

タイムアウト時の処理を入れるには次のようにします。

例：

switch

case "A"

    message "Aを受信"

case "B"

    message "Bを受信"

case timeout

    message "タイムアウト発生"

endswitch

　switch-endswitchの中から強制的に抜け出たい場合は、gotoを使ってください。endswitchで抜け出ることは出来ません。

　受信した文字列によって振り分ける処理が同じ場合、caseの後の文字列をコンマで区切って記述することもできます。

例：

switch

case "A", "B"

    message "AまたはBを受信"

case "C"

    message "Cを受信"

endswitch

caseで指定する文字列は、waitと同様に\マークで複数行に分けることも出来ます。

例：

case "ABCDEFGHIJKLMNOPQRSTUVWXYZ", \

     "abcdefghijklmnopqrstuvwxyz"

switchコマンドの使い方その２

　switchコマンドは、上記のようなホストから受信する文字列で振り分ける他、変数の内容で処理を振り分けることもできます。switchの後ろに変数名を入れると、その値で振り分けられます。

例：

switch #a

case "A"

    message "A"

case "B"

    message "B"

endswitch

　case timeoutが使えなくなる代わり、case defaultが使えるようになります。「その他の場合」という意味になります。

例：

switch #a

case "A"

    message "A"

case "B"

    message "B"

case default

    message "その他"

endswitch

ちなみに「case default」は他のcaseの一番最後でなければいけません。


loopswitch-case-endloop文
loopswitch-case-endloop

　switch-case-endswitchはループさせて使われることが多いです。が、beginloop-endloopで囲むのは面倒なので、このloopswitchを使いましょう。

　switchと書く代わりにloopswitchと書き、endswitchもendloopに置き替えることにより、switchは無限にループするようになります。

　ループの中から抜けだすためには、breakloopを使います。loopagainも使えます。

　endloopを間違ってendswitchにしないように気を付けましょう。また、タイムアウトを設定してる場合はloopswitch内に必ずcase timeoutを入れてください。

例：

timeout 100

loopswitch

case postidle(1) "CCS(N)>", postidle(1) "＞"

    send "^M"

case "^M^Jこれ以上の発言はありません。^M^J"

    breakloop

case timeout

    breakloop

endloop


while-endwhile文
while-endwhile

　whileの所で指定された条件が成立している間、whileとendwhileの中をくり返し実行します。条件の指定方法はifと同じです。

例：

##a = 10

while( ##a > 0 )

    send "A"

    ##a = ##a - 1

endwhile

　while-endwhileの中から強制的にループを抜け出るにはbreakloopを使います。また、loopagainも同様に使えます。


call, callvarlabel文
call, callvarlabel

　callコマンドは、現在のスクリプトを待機状態にし、新たにパラメタで指定されたスクリプトを実行します。returnコマンドが実行されると元のスクリプトに戻り、次の行から実行を再開します。

　callする先は、同じスクリプト内のラベルか、または別のスクリプト内のラベルか、または別のスクリプトの先頭です。

例：

call Sub            ; Subというラベルの所をcall

call SUB.SCR:Sub    ; SUB.SCRのSubをcall

call SOUND.SCR      ; SOUND.SCR(の先頭)をcall

　callのネストは８つ程度までＯＫです。

　callでは呼び出し元から呼び出し先に値を渡すことができます。呼び出す側は、callの後ろのラベルの後ろに渡したい値をコンマで区切って記述してください。

例：

call Sub #a, #b, "ABC"

　呼び出された側では、１つ目の値は#1、２つ目は#2という具合で値を取りだすことができます。渡せる値は文字列だけなので、数値を指定すると勝手に文字列に変換されます。数値を渡したい場合は呼ばれた側でもう一度数値に変換しなおしてください。

例：

Sub:

    message #1

    message #2

    message #3

return

　呼び出された側から呼び出し元に値を返すこともできます。returnの後ろに返す値を指定します。これも文字列だけです。

例：

return "YES"

　呼び出した側では#returnという変数でその値を見ることができます。

例：

call Sub

if( #return == "YES" ) hangup

　callすると、一時的変数（#または##で始まる変数）は、全て別の所に追い出され、一時的変数はクリアされます。returnの実行によりまた復活します。したがって、呼び出し元と先とで共通の変数にアクセスしたい場合は、永久的変数またはグローバル変数を使ってください。

　callvarlabel文は、callの行き先として任意の式が指定できます。callと違い、ラベルとパラメタの間にはコンマが必要です。

例：

#Label = "ABC.SCR:Label"

callvarlabel #Label, "abc"

　行き先が見つからない場合はエラーにならずに次の文へと処理が続行されます。


return文
return

　callから呼ばれたサブルーチンから復帰します。全ての一時的変数はクリアされ、呼びだし元の一時的変数が復活します。

　呼び出し元に値を返すには、その値をreturnの後ろで指定します。数値を指定すると文字列に変換されて返されます。

例：

return "ABC"


hangupコマンド
hangup

　hangupコマンドは電話を切ります。スクリプトの実行も終了します。パラメタはありません。電話が切れるとスクリプトの実行の他、ログも終了させられます。


exitコマンド
exit

exitコマンドはスクリプトの実行を終了します。


closehidetermコマンド
closehideterm

　closehidetermコマンドは秀Termを終了します。


errorコマンド
error

　errorコマンドはパラメタで指定された文字列を表示したのちスクリプトの実行を終了します。messageコマンドとexitコマンドを組み合わせるのと同じ働きをします。

例：

error "制限時間内に応答がありませんでした。"


connectコマンド
connect

　connectコマンドはパラメタで指定されたホストに接続します。ホストの名前はあらかじめホスト一覧で登録されている必要があります。接続が成功すると、現在のスクリプトは終了し、接続後の処理を開始します。失敗すると帰ってきます。複数のホストへの接続を交互に試みたい場合に使います。

　connectが成功した場合は現在のスクリプトには帰ってこないことに十分注意してください。

例（PC-VANとNiftyの両方に接続する）：

setup maxredial = 2

##i = 0

%pcvan_passed = ""

%nif_passed = ""

while( ##i < 10 )

    connect "PC-VAN"

    connect "Nifty"

    ##i = ##i + 1

endwhile

message "10回繰り返したけどつながりませんでした。"

return

としておき、PC-VAN,Niftyの各スクリプトで以下のような処理をする。

PC-VAN側:

%pcvan_passed = "yes"

afterhangup Atoshimatsu

    Atoshimatsu:

if( %nif_passed == "" )

    maxredial 999

    connect "Nifty"

endif

return

Nifty側:

%nif_passed = "yes"

afterhangup Atoshimatsu

    Atoshimatsu:

if( %pcvan_passed == "" )

    maxredial 999

    connect "PC-VAN"

endif

return


gotoコマンド
goto

　gotoコマンドはパラメタで指定されたラベルのところにスクリプトの実行を移動させます。行き先が見つからない場合はエラーになってその場でスクリプトの実行が中断します。

例：

Label:

    wait "A"

    if( 1 ) goto Label1

　goto で指定するラベルには、変数などを使った式を指定することもできます。

例：

    goto #a

　式を使った場合に、もし飛び先が見つからなかった場合は、gotoは無効となり、次の文へと進みます。


checklabelコマンド
checklabel

　checklabelコマンドはパラメタで指定されたサブルーチン（ラベルまたはスクリプトファイル名）が存在するかどうかをチェックします。存在する場合は結果コードがyesになり、存在しない場合はnoになります。

例：

    checklabel NIF.SCR:SetNifKeyAssign

    if( no ) error "飛び先がありません。"

　ラベルには、変数などを使った式を指定することもできます。

例：

    checklabel #a


keyboardコマンド
keyboard

　keyboardコマンドはキーボードからの文字の入力を禁止したり許可したりします。キーボード入力を禁止すると、再び許可されるか、またはスクリプトの実行が終了するまでキーボードからの入力は一切できなくなります。

オートパイロット中に間違ってキー入力されることを防ぎたい場合にoffにしましょう。

禁止するにはoff、許可するにはonをパラメタで指定してください。

例：

keyboard off


setupコマンド
setup

　setupコマンドは各種の秀Term内のパラメタを設定します。

orikaeshi = 20 ～ 80

marginsync = on / off

margin = 0 ～

margintype = hankaku / zenkaku

kinsoku = on / off

tabtospace = 0 / 4 / 8

pacecharacter = 任意の半角１文字

　　　　　　　　または「無し」を意味する""

flyingxmodem = on / off

maxredial = 1 ～ 999

fastsend = on / off

automarginsync = on / off

collation = on / off

　これらのパラメタは、「設定－プロトコル」または「設定－電話のかけかた」のダイアログボックス内の各項目に対応しています。

　tabtospace=0にすると、「タブ->空白変換」をしないようになります。逆に、4または8を指定すると、「タブ->空白変換」をするように設定されます。

　複数のパラメタを一度に指定するときは、それらを空白またはコンマで区切ってください。

例：

setup pacecharacter = "*"

setup pacecharacter = ""

setup margin = 4

setup margintype = hankaku

setup orikaeshi = 78

setup pacecharacter = "", orikaeshi = 76, maxredial=10


titleコマンド
title

　titleコマンドは秀Termウィンドウのキャプション文字列（ウィンドウのタイトル）をパラメタで指定された文字列に変更します。

　電話が切れると自然に元の「秀Term」に戻ります。パラメタを省略した場合は、現在接続中のホスト名または「秀Term」に戻ります。

例：

title "スクリプト処理中"

title


chatコマンド
chat

　chatコマンドはチャットモードをon/offします。パラメタでonまたはoffを指定します。

例：

chat on


sethilightコマンド
sethilight, sethilight1～sethilight4

　sethilightコマンドは強調表示文字列を指定します。29文字までの文字列を１つだけ指定できます。強調表示を解除するには、""を指定してください。

　「設定－強調表示指定」で指定した場合と違い、既に画面に表示されてしまった文字列はもう強調表示されません。

　強調表示文字列は、４つ指定できます。sethilight, sethilight1は、１番目の文字列を指定し、sethilight2～sethilight4は、それぞれの番号の文字列を指定します。

例：

sethilight1 "PEH00775"

sethilight1 ""


portコマンド
port

　portコマンドは通信ポートの設定をします。普通はこのコマンドは必要無いでしょう。

各種のパラメタをまとめて指定できます。

　　xxx=xxx xxx=xxx xxx=xxx　のように、指定します。

以下のパラメタが指定できます。

baudrate = 300 / 1200 / 2400 / 4800 / 9600

stopbit = 1 / 1.5 / 2

parity = none / even / odd

data = 7 / 8

kanjicode = shiftjis / oldjis / newjis / nec / euc

flowcontrol = none / x / hardware

localecho = on / off

localedit = on / off

sendcrlf = on / off

receivecrlf = on / off

siso = on / off

autobplus = on / off

autozmodem = on / off

removectrls = on / off

sendetx = on / off

　一般の式を指定することはできません。例えば、baudrate=##aのような使い方はできません。

例：

port baudrate=1200 stopbit=1 parity=none data=9 kanjicode=shiftjis


keyassignコマンド
keyassign

　keyassignコマンドは、ファンクションキーに文字列やスクリプトを割り当てます。

keyassign キー名(F1～F12), タイトル

　　　　　, string または script または reset , 割り当て内容

　の形で記述します。キー名の所ですが、

　　　Shift + Fxに割り当てするには、Bx

　　　Ctrl+Fxに割り当てするには、Cx

　　　Ctrl+Shift+Fxに割り当てするには、Dx

　を指定してください。

　F1～F12がキー割り当てで、B1～B8が裏キー割り当てです。タイトルは、ファンクションキー表示をしている時にボタンに表示する文字列です。最高半角で８文字文しか指定できません。

　そのキーを押したときに、文字列を送信する場合は、stringを指定し、割り当て内容の所に文字列を入れます。制御コードは^記号と組み合わせて指定します。

　そのキーを押したときに、スクリプトを実行したい場合は、scriptを指定し、割り当て文字列の所に以下のようにスクリプトまたはスクリプト内のサブルーチン名を指定します。

ABC.SCRを最初から実行する場合：　ABC.SCR

ABC.SCRのSub:を実行する場合：　　ABC.SCR:Sub

keyassignコマンドを実行するスクリプトと同じスクリプト内にあるSub:を実行する場合：　　Sub

　resetを指定すると、そのキーへの割り当ては秀Term起動時の状態にリセットされます。resetを指定する場合はタイトルおよび割り当て内容は無視されます。また、割り当て内容は省略できます。

例：

keyassign F1, "MAIL", string, "MAIL^M"

keyassign F2, "未読処理", script, "MidokuShori"

keyassign B1, "回線断", script, NIF.SCR:HangupLine

keyassign B1 "", reset

　キー割り当てのすべてを秀Term起動時の状態に戻すには、keyassign resetを実行します。

例：

keyassign reset


afterhangupコマンド
afterhangup

　afterhangupコマンドは、電話が切れたあとに実行するスクリプトを登録します。登録されたスクリプトは、スクリプトのhangupコマンドやメニューの「電話－電話を切る」等により電話が切れた後に実行されます。

例:

afterhangup NIF.SCR:Atoshimatsu

　　　　　　　　　・・・NIF.SCRのAtoshimatsu:を登録する

afterhangup TERM.SCR

　　　　　　　　　・・・TERM.SCRを登録する

afterhangup Owari

　　　　　　　　　・・・現在のスクリプトのOwari:を登録する

　電話が切れ、afterhangupで登録したスクリプトが実行されると、以前のafterhangupの登録情報は消去されます。もう一度電話が切れてももう先ほど登録したスクリプトは実行されません。

　スクリプトのclosehidetermコマンドや、ユーザによる秀Termのクローズ（ファイル－終了や、Ａｌｔ＋Ｆ４等）によって電話が切られる際にはこのafterhangupで登録したスクリプトは実行されません。

　afterhangupで登録したスクリプトが実行されるとき、#1という変数に次のような形式で通話時間が代入されています。

　　　－　最初の２文字が時間

　　　－　次の２文字が分

　　　－　次の２文字が秒

　　　－　合計６文字

使い方の例：

message "通話時間は " + part( #1, 0, 2 ) + "時間 "    \

           + part( #1, 2, 2) + "分 " + part( #1, 4, 2 )  \

           + "秒でした。"

exit


imeコマンド
ime

　imeコマンドは、かな漢字変換をＯＮ／ＯＦＦします。パラメタでONまたはOFFを指定します。

例：

ime  on


endscrollコマンド
endscroll

　endscrollコマンドは、もし現在秀Termがバックスクロール中である場合に、バックスクロールを強制的に終了させます。


getchatコマンド
getchat

　getchatコマンドは、チャットウィンドウ中の文字列を変数に取り込みます。パラメタで変数名を指定してください。チャットモードでない場合でも、通信ポートの設定でローカル編集がｏｎの場合はそこのバッファの内容を取り出します。

例：

getchat #chat


setchatコマンド
setchat

　setchatコマンドは、チャットウィンドウに文字列を設定します。パラメタでチャットウィンドウに設定する文字列を指定してください。チャットモードでない場合でも、通信ポートの設定でローカル編集がｏｎの場合はローカル編集のバッファの内容を設定します。

例：

setchat "はろはろ＞all"


setchatfilter, nochatfilterコマンド
setchatfilter, nochatfilter

　setchatfilterコマンドは、チャットから文字列が入力されるたびに呼び出されるサブルーチンを登録します。サブルーチンには第一パラメタ（変数名は#1）にチャット行の内容が渡されます。

例：

setchatfilter Filter

…………

Filter:

    message #1

    return

　nochatfilterは、チャットフィルタのサブルーチンを解除します。nochatfilterしなくても、電話が切れると自動的にチャットフィルタも解除されます


fontコマンド
font

　fontコマンドは、秀Termの画面の表示に使うフォントをパラメタで指定されたものに切り替えます。

　パラメタにはフォントのフェース名だけを指定するか、または第１パラメタでフェース名、第２パラメタでサイズ（フォントの高さのピクセル数）を指定してください。

例：

font "ＭＳ ゴシック", 18

font "FixedSys"


setautohangupコマンド
setautohangup

　setautohangupコマンドは、オートパイロットでの無人通信のための、非常用の回線自動切断時間を設定します。このコマンドで時間を指定しておくと、その時間何も受信しなかった場合に自動的に電話を切ります。パラメタで時間を指定してください。単位は分です。

　パラメタに０を指定すると自動切断は解除されます。また、setautohangupで指定した値は秀Termを終了するまで有効となります。

例：

setautohangup 2


gethostnameコマンド
gethostname

　gethostnameコマンドは、現在接続しているホストの名前を指定された変数に格納します。パラメタで変数名を指定してください。

　電話がつながっている最中でない場合は""が代入されます。

例：

gethostname #name


displayコマンド
display

　displayコマンドは、秀Termが受信した文字列を実際にウィンドウに表示するかどうかを制御します。パラメタでｏｎまたはｏｆｆを指定してください。

例：

display off

　スクリプトの実行が終了すると自動的にdisplay onとなります。


setportnoコマンド
setportno

　setportnoコマンドは、秀Termが使用する通信ポートの番号を指定します。このコマンドを通信中に使用すると電話が切れてしまうかもしれないので使用には十分注意してください。

　パラメタで通信ポート番号（１～５）を指定してください。１がcom1、２がcom2…と対応します。

例：

setportno 1


soundコマンド
sound

　soundコマンドは、秀Term Sound Systemを禁止状態にしたり、許可状態にします。禁止状態にすると、音は一切鳴らなくなります。

　秀Term Sound Systemを禁止状態にしたままスクリプトを終了させたりすると、そのまま音が鳴らない状態になります。そのような使い方をする場合はスクリプトの利用者にそうなることをわかるようにしてください（でないとバグと間違われます）

　パラメタでonまたはoffを指定してください。

例：

sound off


logコマンド
log

　logコマンドはログを開始したり終了したりします。パラメタが何も指定されなかった場合はログの終了コマンドとなり，パラメタが指定されている場合はログの開始コマンドとなります。

　ログを開始する場合は、パラメタでファイル名を指定してください。ファイル名のみが指定された場合は、サイズ制限はなく、追加モードで作成されます。

　サイズ制限を付けるには、ファイル名の後にサイズ（ＫＢ単位）を指定してください。さらに、作成方法を指定するにはさらにパラメタに次のようにして作成方法を指定してください。

append  ･･･ 追加モード（省略した場合と同じ）

create  ･･･ 新規作成

backup  ･･･ １世代バックアップ作成

backup2 ･･･ ２世代バックアップ作成

backup9 ･･･ ９世代バックアップ作成

例：

log  "NIFTY.LOG"

log

log "NIFTY.LOG", 10, backup2

log "PCVAN.LOG", create

　サイズ制限なしを指定しても、実際は９９９９ＫＢがサイズの制限になっています。

　スクリプトだけの特別な機能として、ログへの出力を一時的に停止させたり、再開させたりできます。一時的に停止させるには、

log pause

　で、再開させるには、

log resume

　です。display offしている最中にログへの出力も止めたい場合は、log pauseと、log resumeを使ってください。

　制御コードを除去してログを作成させたい場合は、さらにnocontrolcode、制御コードを除去しないようにログを作成させたい場合はcontrolcodeというパラメタを追加してください。どちらも指定しなかった場合は通信ポートの設定の「制御コードの除去」と同じになります。

例：

log "abc.log", append, nocontrolcode


uploadコマンド
upload

　uploadコマンドはファイルをアップロードします。パラメタを何も指定しないで実行すると、プロトコルとファイル名（もし必要ならば）をユーザに問い合わせます。パラメタでプロトコルとファイル名の両方または片方を指定することができます。指定されるとユーザへの問い合わせは行われなくなります。

　ファイル名とプロトコルの指定方法は、

upload  "ファイル名", プロトコル名	または

upload  "ファイル名"	または

upload  , プロトコル名

で、プロトコル名には以下のものが指定できます。

none         ･･･  無手順

xmodem       ･･･  XMODEM

xmodemcrc    ･･･  XMODEM/CRC

xmodemk      ･･･  XMODEM-1k

transit      ･･･  TransIt

zmodem       ･･･  ZMODEM

quickvan     ･･･  QuickVAN

bplus        ･･･  BPLUS

ymodem       ･･･  YMODEM

ymodemg      ･･･  YMODEM-g

ymodembatch  ･･･  YMODEM-batch

ymodemgbatch ･･･  YMODEM-g-batch

例：

upload "mail.txt", none

upload , bplus

　アップロードが成功すると、終了コードはyesになり、失敗した場合または中断された場合はnoになります。


downloadコマンド
download

　downloadコマンドはファイルをダウンロードします。パラメタを何も指定しないで実行すると、プロトコルとファイル名（もし必要ならば）をユーザに問い合わせます。指定されるとユーザへの問い合わせは行われなくなります。

　ファイル名とプロトコルの指定方法は、

download  "ファイル名", プロトコル名

download  "ファイル名"

download  , プロトコル名

download  "ファイル名", プロトコル名

で、プロトコル名には以下のものが指定できます。

xmodem     ･･･  XMODEM

xmodemcrc  ･･･  XMODEM/CRC

xmodemk    ･･･  XMODEM-1k

transit    ･･･  TransIt

quickvan   ･･･  QuickVAN

bplus      ･･･  BPLUS

zmodem     ･･･  ZMODEM

ymodem       ･･･  YMODEM

ymodemg      ･･･  YMODEM-g

ymodembatch  ･･･  YMODEM-batch

ymodemgbatch ･･･  YMODEM-g-batch

　さらに、もし、同じ名前のファイルが既に存在している場合にどう処理するかを指定することができます。これを指定するには、downloadコマンドの後ろに、さらにコンマを付けて、以下のパラメタを付けてください。

overwrite   ･･･　　既存のファイルに上書きする

append      ･･･　　既存のファイルの後ろに追加する

resume      ･･･　　ダウンロードレジューム

例：

download "ABC.TXT", xmodem

download  , bplus, append

download  , quickvan, overwrite

download  ,  ,  append

　ダウンロードが成功すると、終了コードはyesになり、失敗した場合または中断された場合はnoになります。


sendclipbrdコマンド
sendclipbrd

　sendclipbrdコマンドはクリップボードの内容を送信します。

例：（クリップボードの内容を改行付きで送信する）

SendAndCR:

    sendclipbrd

    send "^M"


messageコマンド
message

　messageコマンドはパラメタで指定されたメッセージを表示します。ユーザが了解ボタンを押すと処理が続行されます。文字列に改行文字があると、メッセージも改行して表示されます。

例：

message "メールが来ています"

message "秀Term^M   です。"


debuginfoコマンド
debuginfo

　debuginfoコマンドは、２つの使い方があります。一つは、デバッグ情報の出力を許可／禁止する使い方で、もう一つはデバッグ情報を出力する使い方です。

　debuginfoのパラメタとしてonまたはoffを指定した場合は、デバッグ情報の出力の許可／禁止を指定します。

　debuginfo on

　とすると、デバッグ情報の出力を許可します。

　debuginfo off

　とすると、デバッグ情報の出力が禁止されます。秀Termを起動した状態ではoffになっていて、スクリプトの中で一度onにしても、スクリプトがすべて終了するとまたoffになります。

　debuginfoコマンドのパラメタで文字列が指定された場合は、メッセージをデバッグ端末またはDBWinなどのデバッグ情報を表示するアプリケーションに渡します。ただし、「debuginfo off」の状態になっている場合どこにも出力されません。

　スクリプト中にdebuginfoで見たい情報を表示するようにしておいて、スクリプトの先頭にdebuginfo onを入れておくとデバッグが楽になります。そのスクリプトが完成してNIFTY-Serveなどにアップロードする場合は、先頭の部分をdebuginfo offにすればいいです。

　デバッグ端末もDBWinなどもない場合にデバッグ情報が出力されるとスクリプトが止まってしまうかもしれないので注意して下さい。

　デバッグ端末で改行させる場合は^Jを使ってください。

例：

debuginfo "メールの処理完了^J"


questionコマンド
question

　questionコマンドはmessageコマンドと同様に、パラメタで指定された文字列を表示します。messageコマンドの場合は了解ボタンを押して処理が続行しますがquestionコマンドでは「はい」と「いいえ」ボタンのどちらかを押すことで　処理が続行します。

　「はい」ボタンが押された場合は終了コードは「yes」になり、「いいえ」ボタンを押した場合は「no」になります。

　文字列に改行文字があると、そこで改行します。

　if文と組み合わせて使います。

例：

question "電話を切りますか？"

if( yes ) hangup


timeoutmessageコマンド
timeoutmessage

　timeoutmessageコマンドはタイムアウト付きでメッセージを表示します。指定された時間が経過してもユーザがＯＫボタンを押さなかった場合にメッセージを消去し、スクリプトの処理を続行します。他はmessageと同じです。

　第１パラメタでメッセージ文字列を指定し、第２パラメタでタイムアウト時間を秒単位で指定してください。

例：

timeoutmessage "メールが来ています", 10

timeoutmessage "秀Term^M   です。", 10


timeoutquestionコマンド
timeoutquestion

　timeoutquestionコマンドはタイムアウト付きでquestionコマンドを実行します。指定された時間が経過してもユーザがボタンを押さなかった場合にメッセージを消去し、スクリプトの処理を続行します。他はquestionと同じです。

　タイムアウトになった場合は「はい」ボタンが押されたものとみなされます。

　第１パラメタでメッセージ文字列を指定し、第２パラメタでタイムアウト時間を秒単位で指定してください。

例：

timeoutquestion "電話を切りますか？", 10

if( yes ) hangup


input, secretinputコマンド
input, secretinput

　inputコマンド、secretinputコマンドは、ともに、パラメタで指定された文字列を表示してユーザから文字列を入力してもらい、それを指定された変数に格納します。

　secretinputコマンドは、ユーザが入力した文字を「＊」に置き換えて表示します。パスワードの入力等に便利です。

　ユーザが取消ボタンを押した場合は入力した文字列は代入されません。また、その場合は終了コードが「cancel」になります。確定ボタンを押した場合は入力した文字列が変数に代入され、終了コードは「enter」になります。

　次のような形で使います。

input メッセージ, 変数名

secretinput メッセージ, 変数名

　第１パラメタでユーザに表示する文字列を指定し、第２パラメタで格納してほしい変数を指定します。

例：

input "ユーザIDを入力してください", %UserID

secretinput "パスワードを入力してください", %%Password

メッセージ文字列に改行文字（^M）を入れておくと、メッセージはそこで改行して表示されます。

例：

input "ファイル名を入れてください。^M例：ABC.TXT", #name

　第３パラメタを指定すると、それはデフォルトの値として解釈されます。指定された文字列は入力用のウィンドウに表示されます。

例：

input "ファイル名を入力してください。", #name, "ABC.TXT"


inputfilenameコマンド
inputfilename

　inputfilenameコマンドは、ファイル選択用のダイアログボックスを表示し、ユーザが指定したファイルの名前を変数に代入します。

　第１パラメタでダイアログボックスのタイトルを指定し、第２パラメタで変数名を指定してください。

　ダイアログボックスのファイル一覧に表示するワイルドカードを指定したい場合は、第３パラメタにそのワイルドカードをダブルクオーテーションで囲って指定してください。

　ユーザがキャンセルすると終了コードがcancelになります。

例：

inputfilename "アップロードするファイル", @filename

inputfilename "ファイル", #a, "*.txt;*.ini"


menuコマンド
menu, numbermenu

　menu, numbermenuコマンドは、メニューを表示します。メニューの項目をコンマで区切ってパラメタでいくつでも指定できます。

　numbermenuは、メニューの左側に番号を振ってメニューを表示します。ユーザは、番号のキーを押すことで即座にそのメニューが選べます。

　第１パラメタが選ばれた場合はresult==0になり、第２パラメタだとresult==1といった具合になります。ユーザがキャンセルすると終了コードは-1になります。

例：

numbermenu "コマンド１", "コマンド２", "コマンド３"

switch result

case 0

message "コマンド１"

case 1

message "コマンド２"

case 2

message "コマンド３"

case -1

message "キャンセル"

endswitch

　メニューの中にセパレータを入れたい場合は、その位置に数字の0を入れてください。

例：

menu "コマンド１", "コマンド２", 0, "コマンド３"

メニュー項目が空の場合はその項目は表示されません。例えばmenu "ABC", "", ""とやると、メニューは"ABC"だけが表示されます。


addmenu, addnumbermenu,showmenuコマンド
addmenu, addnumbermenu, showmenu

　addmenu, addnumbermenuコマンドは、メニューを項目ごとに作成します。

　最初にaddmenuを呼ぶと、秀Termの内部にメニューが作成され、パラメタで指定された文字列がメニューに追加されます。addnumbermenuだと番号付きで追加されます。

　showmenuを実行すると、作成されたメニューが表示され、メニューの表示が終わるとそのメニューは消去されます。

　addmenu,addnumbermenuのパラメタに数字の０を指定するとセパレータが追加されます。

　addmenu,addnumbermenuのパラメタは１つしか指定できません。たとえば"abc","def"と指定しても、追加されるのは"abc"だけです。

　addmenuとaddnumbermenuは混ぜないでください。

例：

addmenu "タイトル"

addmenu 0

addmenu "コマンド１"

addmenu "コマンド２"

addmenu "コマンド３"

showmenu


chdirコマンド
chdir

　chdirコマンドは、秀Termのカレントドライブ／カレントディレクトリを変更します。直接パスを指定する方法と、秀Termの設定で指定したディレクトリに移動する方法があります。

chdir log         ･･･ ログのディレクトリに移動する

chdir upload      ･･･ アップロード用のディレクトリ

chdir download    ･･･ ダウンロード用のディレクトリ

chdir script      ･･･ スクリプト用のディレクトリ

chdir "C:\"       ･･･ C:\に移動する

chdir #a          ･･･ #aの値の所に移動する

chdir "log"       ･･･ "log"に移動する

　chdirコマンドを実行した後は、必ずrestoredirコマンドを使ってカレントディレクトリを元に戻してください。そうしないと以後の秀Termの動作がおかしくなります。（なるべく早めに）

例:

chdir log

appendfile #f

if( no )

    createfile #f

endif

restoredir           ; chdirした後は必ず必要です。


restoredirコマンド
restoredir

　restoredirコマンドは、chdirコマンドで変更されたカレントディレクトリ／カレントドライブを元に戻します。chdirが２回連続で実行された後でも正しく元のディレクトリに戻します。

　もし、restoredirを忘れてしまった場合、スクリプトの実行が終了するまで、または、returnコマンドが実行されるまでカレントディレクトリは元に戻りません。


openfileコマンド
openfile

　openfileコマンドはファイルをオープンします。オープンすると、この後readfileコマンドを使ってそのファイルから１行づつ読んでその内容を変数に代入したりすることができます。

　ファイルが存在しない場合はエラーとなります。

　パラメタとしてファイル名を指定します。

例:

openfile "abc.txt"

オープンに失敗すると、終了コードはnoになり、成功するとyesになります。


createfileコマンド
createfile

　createfileコマンドはファイルを作成し、オープンします。すでに同じ名前のファイルが存在する場合は、そのファイルの内容は切り捨てられます。

　作成が成功すると、このあとwritefileコマンドを使ってこのファイルに書き込むことができます。

　ファイル名はこの後もwritefileやclosefile等で使いますので何等かの変数に覚えておくのが便利です。

例:

createfile "abc.txt"

作成に失敗すると終了コードはnoになり、成功するとyesになります。


createtempfileコマンド
createtempfile

　createtempfileコマンドはテンポラリファイルを作成し、オープンします。作成されたファイル名はパラメタで指定された変数に格納されます。

　テンポラリファイルは後で必ずclosefileとdelfileしなければいけません。

例:

createtempfile #a

作成に失敗すると終了コードはnoになり、成功するとyesになります。


closefileコマンド
closefile

　closefileは、openfileまたはcreatefileまたはappendfileでオープンまたは作成したファイルをクローズします。クローズしないまま、同時にオープンできるファイルの数は、５つまでです。したがって、ファイルとのアクセスが終了したら、早めにこのclosefileコマンドを実行してください。

　closefileコマンドをし忘れた場合は、全てのスクリプトの実行を終了するまでそのファイルはオープンされたままになります。

例:

closefile "abc.txt"


appendfileコマンド
appendfile

　appendfileコマンドはファイルを追加書き込み用にオープンします。ファイルが存在しない場合はエラーになります。

　作成が成功すると、このあとwritefileコマンドを使ってこのファイルに書き込むことができます。

例:

appendfile "abc.txt"

　ファイルが存在しない場合にはcreatefileしたい場合は、以下のようにすればいいです。

appendfile "abc.txt"

if( no ) createfile "abc.txt"

作成に失敗すると、終了コードはnoになり、成功するとyesになります。


readfileコマンド
readfile

　readfileコマンドはファイルから１行読み込み、その内容を変数に代入します。以下のような形式で使います。

readfile ファイル名, 変数名

　ファイルはopenfileコマンドによってあらかじめオープンされてないといけません。

　読み読みに失敗したり、ファイルの最後まで読み込むと、終了コードはnoになり、正常に読み込まれた場合はyesになります。

　読み込んだデータの最後の改行文字は除去されます。

例:

readfile "abc.txt", #a


writefileコマンド
writefile

　writefileコマンドはファイルに１行書き込みます。以下のような形式で使います。

writefile ファイル名, 内容

　ファイルはcreatefileコマンドまたはappendfileコマンドによって既にオープンされてないといけません。

　書き込みに失敗すると終了コードはnoになり、正常に書き込まれた場合はyesになります。

　書き込みデータには、必ず最後に改行文字が付加されます。したがって、行単位でのファイルアクセスしかできません。

例:

writefile "abc.txt", "結果は" + #a + "です。"


delfileコマンド
delfile

　delfileコマンドはファイルを削除します。成功すると終了コードはyesになり、失敗するとnoになります。openfile等で既にオープンされているファイルを削除する場合はまずclosefileしてからにしてください。

例：

delfile "abc.txt"


copyfileコマンド
copyfile

　copyfileコマンドはファイルを複写します。成功すると終了コードはyesになり、失敗するとnoになります。

　第１パラメタで複写元のファイル名を指定し、第２パラメタで複写先のファイル名を指定します。

例：

copyfile "abc.txt", "xyz.txt"


renamefileコマンド
renamefile

　renamefileコマンドはファイルの名前を変更します。成功すると終了コードはyesになり、失敗するとnoになります。

　第１パラメタで現在のファイル名を指定し、第２パラメタで新しいファイル名を指定します。

例：

renamefile "abc.txt", "xyz.txt"


getiniコマンド
getini

　getiniコマンドは、任意のINIファイルから文字列を取り出します。以下のような形式で使います。

getini INIﾌｧｲﾙ名, ｾｸｼｮﾝ名, ｷｰ名, 変数名

　INIファイルの名前にはドライブ名やパス付きで指定することはできません。したがって、Windowsディレクトリ内のINIファイルにしかアクセスできません。（将来修正予定）

例：

getini "HIDETERM.INI", "HideTerm", "Baudrate", #Baudrate


putiniコマンド
putini

　putiniコマンドは、任意のINIファイルに文字列を書き込みます。以下のような形式で使います。

putini INIﾌｧｲﾙ名, ｾｸｼｮﾝ名, ｷｰ名, 文字列

　INIファイルの名前にはドライブ名やパス付きで指定することはできません。したがって、Windowsディレクトリ内のINIファイルにしかアクセスできません。（将来修正予定）

例：

putini "HIDETERM.INI", "HideTerm", "F1", #a + ":Sub"


getwindirコマンド
getwindir, getwinsysdir, getcurrentdir, gethidetermdir

　getwindirコマンドは、Windowsのディレクトリをパラメタで指定された変数に格納します。「￥」マークは付かないので必要に応じて「￥」マークを付けて使ってください。

　getwinsysdirコマンドは、Windowsのシステムディレクトリを返します。

　getcurrentdirコマンドは、カレントディレクトリを返します。

　gethidetermdirコマンドは、hideterm.exeのディレクトリを返します。

例：

getwindir #a

#a = #a + "\hideterm.ini"

openfile #a


readbufferコマンド
readbuffer

　readbufferコマンドは、秀Termのスクロールバッファの内容を変数に代入します。以下のような形式で使います。

readbuffer 行番号 , 変数名

　現在カーソルのある行の番号が0で、その上の行が1､その上が2･･･です。行番号に負の値を指定すると0と見なされます。

例:

readbuffer 0, #a


writebuffer, writebuffer2コマンド
writebuffer, writebuffer2

　writebufferコマンドは、文字列をスクロールバッファに追加します。現在のカーソル位置から順に書き込まれます。

　writebufferした内容は画面およびログには出力されますが、送信されることはありません。送信したい場合はsendコマンドを使いましょう。

　エスケープシーケンスを使えばカーソルを動かしたり、画面をクリアしたりもできます。

　writebuffer2コマンドは、基本的にwritebufferと同じですが、ログには出力せず、画面にだけ出力します。

例:

writebuffer "ABC^M^J"

writebuffer "^01B[2J"           ･･･ 画面をクリアする


writelogコマンド
writelog

　writelogコマンドは、文字列を現在作成中のログに書き込みします。現在作成中のログが存在しない場合は何もしません。

例:

writelog "ABC^M^J"


sendbreakコマンド
sendbreak

sendbreakコマンドはブレーク信号を送信します。


playコマンド
play

　playコマンドは音楽を演奏します。パラメタに音符データを指定してください。

音符データは以下のような形式で記述してください。

!     ...  ビープ音を出す。これを指定する場合は他には何も指定してはいけない。

o     ...  次の１文字でオクターブを指定する。o1～o8まで指定できる。

           1が低く、8が高い。次にoを指定するまで有効である。

t      ...  次の数字で音の長さを指定する。4,8,16,32,64が指定できる。

           4が一番長く、64が一番短い。数が倍になると長さは半分になる。

a～g  ... 音を指定する。cがドの音である。

>	... オクターブを１つ上げる。

<	... オクターブを１つ下げる。

.	... これの前の音を半音長くする。２つつけるとさらにその半分の音長くなる。

例：

play "o5cdefgo6abc"

　音楽として、WAVEオーディオのファイル名を指定すると、その音楽を再生します。ただし、WindowsMMEまたはWindows3.1以上でなくてはいけません。

例：

play "tada.wav"

　一部、MME(MultiMediaExtensions)をインストールしたマシンで音楽が出ないという現象があります。


windowコマンド
window

　windowコマンドは、秀Termウィンドウの最大化／最小化／復元を行います。パラメタにmaximize/minimize/restoreのいずれかを指定してください。

例：

window minimize


getversionコマンド
getversion

　getversionコマンドは、秀Termのバージョンをパラメタで指定された変数に代入します。バージョン番号は１００倍した値で代入されます。例えば1.23の場合は123という値（または文字列変数の場合は"123"）が代入されます。

例：

getversion ##a


clearbufferコマンド
clearbuffer

　clearbufferコマンドは、秀Termのバックスクロールバッファをクリアします。パラメタはありません。

例：

clearbuffer


getdateコマンド
getdate

　getdateコマンドは、現在の日付を変数に格納します。日付は６桁の半角の数字で格納されます。例えば、１９９２年の２月１０日だと、"920210"となります。

例：

getdate #a     ・・・　#aに現在の日付を代入する


gettimeコマンド
gettime

　gettimeコマンドは、現在の時刻を変数に格納します。日付は６桁の半角の数字で格納されます。例えば、１２時３０分１０秒だと、"123010"となります。

　このコマンドは、秀Term Version2.0より仕様変更されています。Version1.XXでは秒の部分がありませんでした。

例：

gettime #a     ・・・　#aに現在の日付を代入する


getweekコマンド
getweek

　getweekコマンドは、現在の曜日を変数に格納します。月曜日だと"月"、火曜日だと"火"、という具合で代入されます。

例：

getweek #a     ・・・　#aに現在の曜日を代入する


datetolinearコマンド
datetolinear

　datetolinearコマンドは、パラメタで指定された日付文字列を1980年１月１日から「何日経過してるか」という値（リニアな値）に変換します。

　第１パラメタで日付の文字列（６桁の数値）を指定し、第２パラメタで結果を格納する変数名を指定します。

例：

getdate #date

datetolinear #date, ##linear


run, runsync,runsync2コマンド
run, runsync, runsync2

　runコマンドとrunsyncは、パラメタで指定されたプログラムを実行します。runコマンドはプログラムを起動してすぐにスクリプトの処理を続行しますが、runsyncとrunsync2コマンドは起動したプログラムが終了するまでスクリプトの実行を待機させます。

　runsyncは、秀Termをアイコンにして待機させますが、runsync2は秀Termをそのままの形で待機させます。

　プログラムの起動に失敗すると、エラーメッセージが表示され、さらに終了コードはerrorとなります。

例：

run "winhelp.exe script.hlp"

getini "HIDETERM.INI", "HideTerm", "Editor", #Editor

run #Editor + " SCROLL.TXT"

if( error ) exit


savebufferコマンド
savebuffer

　savebufferコマンドは、スクロールバッファの内容をファイル（SCROLL.TXT）に掃き出します。秀Termは終了時にバッファの内容を掃き出しますが、秀Term終了前にマシンをリセットしてしまったりするような不慮の事故の際にも確実に保管したい場合に使ってください。


ddeinitiateコマンド
ddeinitiate

　ddeinitiateコマンドは、秀Term側をクライアントとするDDEトランザクションを開始します。

　第１パラメタでアプリケーション名を指定し、第２パラメタでトピック名を指定してください。

　トランザクションの確立に成功すると終了コードはyesになり、失敗すると、終了コードはnoになります。

例：

ddeinitiate "EXCEL", "LOAN.XLS"

if( no ) error "DDEに失敗しました。"

　ddeinitiateして、ddeterminateしないでもう一度ddeinitiateすると、以前にddeinitiateしたトランザクションは自動的に解除（disconnect）されます。つまり、複数のトランザクションを同時に確立（connect）することはできません。


ddeterminateコマンド
ddeterminate

　ddeterminateコマンドは、ddeinitiateで確立したトランザクションを解除します。


dderequestコマンド
dderequest

　dderequestコマンドは、ddeinitiateで確立したトランザクションからデータを要求します。

　第１パラメタでアイテム名、第２パラメタでデータを受け取る変数名を指定します。

　エラーの場合は終了コードがnoになります。

例：

dderequest "Now", #time


ddeexecuteコマンド
ddeexecute

　ddeexecuteコマンドは、ddeinitiateで確立したトランザクションの相手にEXECUTEコマンドを送信します。

　パラメタでコマンドを指定します。

　エラーの場合は終了コードがnoになります。

例：

ddeexecute "REFRESH"


ddepokeコマンド
ddepoke

　ddepokeコマンドは、ddeinitiateで確立したトランザクションの相手にデータを渡します。

　第１パラメタでアイテム名を指定し、第２パラメタで渡す文字列を指定します。

　エラーの場合は終了コードがnoになります。

例：

ddepoke "TIME", "1:12:30"


関数について

文字列関数

part	文字列の部分の計算

search	文字列を検索

drop	検索した部分の切り捨て

searchback	文字列を後ろから検索

dropback	後ろから検索した部分の切り捨て

length	文字列の長さ

tohankaku	半角に変換

tozenkaku	全角に変換

touppper	大文字に変換

tolower	小文字に変換

変換関数

value	数値に変換

ファイル関数

existfile	ファイルが存在するか

filesize	ファイルのサイズ

その他関数

keystate	キーの状態


part関数

　part関数は、文字列の中から開始位置と長さで指定される特定部分を取りだすのに使います。次のような形式で使います。

part( 文字列, 開始位置, 長さ )

　開始位置は、先頭が０です。

例（getdateした文字列から月を取りだす）：

getdate #date

#month = part( #date, 2, 2 )


search関数

　search関数は文字列の中から特定の文字列を検索し、見つかった場合はその位置以降の文字列を返します。見つからなかった場合は""を返します。次のような形式で使います。

search( 文字列１, 文字列２ )

　文字列１の中から文字列２を検索します。

例：

message search( "ABC DEF GHI", "DEF" )

                （"DEF GHI"が表示されます）


searchback関数

　searchback関数は文字列を後ろから検索します。他はsearch関数とまったく同じです。


drop関数

　drop関数は文字列の中から特定の文字列を検索し、見つかった場合はその位置より前の文字列を返します。見つからなかった場合は元の文字列をそのまま返します。search関数と逆の結果を得ることができます。以下のような形式で使います。

drop( 文字列１, 文字列２ )

　文字列１の中から文字列２を検索します。

例：

message drop( "ABC DEF GHI", "DEF" )

                （"ABC "が表示されます）


dropback関数

　dropback関数は文字列を後ろから検索します。それ以外はdrop関数と同じです。


length関数

length関数は文字列の長さを返します。以下のような形式で使います。

length( 文字列 )

length関数の返す値は数値です。

例：

message length( "ABC" )

                 （"3"が表示されます）


tohankaku関数

　tohankaku関数は文字列の中の全角文字を半角文字に変換した値を返します。以下のような形式で使います。

tohankaku( 文字列 )

　変換対象となるのは英数字と一部の記号だけで、ひらがなとカタカナは変換されません。

例：

message tohankaku( "ＡＢＣ" )

          （"ABC"が表示される）


tozenkaku関数

　tozenkaku関数は文字列の中の半角文字を全角文字に変換した値を返します。以下のような形式で使います。

tozenkaku( 文字列 )

　変換対象となるのは英数字と一部の記号だけで、カナは変換されません。

例：

message tozenkaku( "ABC" )

          （"ＡＢＣ"が表示される）


toupper関数

　toupper関数は文字列の中の小文字を大文字に変換した値を返します。以下のような形式で使います。

toupper( 文字列 )

　変換されるのは半角文字だけで、全角文字は対象となりません。

例：

message toupper( "abc" )

          （"ABC"が表示される）


tolower関数

　tolower関数は文字列の中の大文字を小文字に変換した値を返します。以下のような形式で使います。

tolower( 文字列 )

　変換されるのは半角文字だけで、全角文字は対象となりません。

例：

message tolower( "ABC" )

          （"abc"が表示される）


value関数

value関数は文字列を数値に変換します。以下のような形式で使います。

value( 文字列 )

　数値変数（##で始まる変数）に文字列を代入すると自動的に数値に変換されますが、変換されることをわかりやすくしたり、式の途中で変換したい場合にこのvalue関数が便利です。

例：

##a = 100 + value( #x )


existfile関数

　existfile関数は、指定されたファイルが存在するかどうかを返します。if文やwhile文の中で使ってください。以下のような形式で使います。

existfile( ファイル名 )

例：

if( not existfile( "ABC.TXT" ) ) message "ABC.TXTは存在しません"


filesize関数

　filesize関数は、指定されたファイルのサイズをキロバイト単位で返します。以下のような形式で使います。

filesize( ファイル名 )

　返される値はキロバイト単位の数値であることに注意してください。

例：

##a = filesize( "ABC.TXT" )


keystate関数

　keystate関数は、パラメタで指定されたキーの状態（押されているかどうか）を返します。

keystate( キーコード )

　キーが押されている場合は１が返り、押されてない場合は０が返ります。

　キーコードはwindows.hで定義されているVK_xxxxのコードです。例えば以下の値になります。

　マウス左ボタン   =  1

　マウス右ボタン   =  2

　Shiftキー        =  16

　Ctrlキー         =  17

例：

##a = keystate( 16 )