; ; HSP help manager用 HELPソースファイル ; (先頭が「;」の行はコメントとして処理されます) ; %type 内蔵命令 %ver 2.61 %note ver2.61標準命令 %date 2004/03/01 %author onitama %url http://www.onionsoft.net/ %index await 一定時間待つ(ACTIVE) %group プログラム制御命令 %prm p1,p2 p1=0〜(0) : 待ち時間(1ms単位) p2=0〜1(0) : スリープ間隔(1ms単位) (デフォルト値= -1) %inst プログラムの実行を一定時間だけ中断します。 ^ wait命令と似ていますが、await命令は前回waitした時間からの待ち 時間を指定します。これにより、描画速度の違いなどから時間が 早く過ぎることを防止することができます。リアルタイムで更新 される画面などの速度を一定に保つ時に使用します。 ^ p2のスリープ間隔が0の場合は、ver2.55までのawaitと同様に CPU処理を100%奪って時間の調整を行ないます。 p2が1以上の場合は、スレッドのスリープ機能を使って指定した時間だけ 反応をなくすことで時間待ちを行ないます。 スリープ間隔が大きいほどCPUの負担が軽くなりますが、ウインドゥの 書き換えなどが遅くなることがあります。通常は、5〜10msを指定する ことで、CPUに負担をかけずに時間の調整をすることが可能です。 p2がマイナス値の場合は、スリープ間隔を変更しません。 起動時のスリープ間隔デフォルト値は、5に設定されています。 ^ p1およびp2で指定する値は1msで、waitの値よりも10倍細かいので注意してください。 ^ HSPでは、他のWindowsタスクに処理時間を渡すために長い時間ループが 起こる可能性がある場所にはwaitかawait命令を入れることを推奨しています。 waitやawait命令がない命令の中を長い時間ループするようなプログラムを実行すると、 ウインドゥをドラッグしにくくなったり、他のタスクに移るのに時間がかかったりします。 %href wait %index exec Windowsのファイルを実行する %group プログラム制御命令 %prm "filename",p1,"command" "filename" : 対象となるファイル名 p1=0〜(0) : ファイル実行モード "command" : コンテキストメニューの操作名 %inst execは"filename"で指定したファイル名のアプリケーションを実行します。 拡張子がEXEの場合は、拡張子を省略することができます。 p1で実行時のモードを選ぶことができます。p1を省略した場合は0になります。 ^p モード0 HSPノーマル実行 モード1 HSPタスク実行待ち モード2 最小化モードで実行 モード16 関連付けされたアプリケーションを実行 モード32 指定したファイルを印刷する ^p "command"が指定された場合は、"filename"で指定したファイルまたはフォルダ名に 対するコンテキストメニュー操作名となります。 コンテキストメニュー操作名は、レジストリに登録されているアクションを指定する 文字列で、標準で以下のようなものが用意されています。 ^p 操作名 | 説明 ----------------------------------------------------------- edit | エディタを開いて編集する。 explore | フォルダを選択して、エクスプローラを起動します。 open | 関連付けられたアプリケーションでファイルを開きます。 print | 関連付けられたアプリケーションでファイルを印刷します。 properties | ファイルまたはフォルダのプロパティを表示します。 ^p "command"が指定された場合は、ファイル実行モードの16、32は無効になります。 また、実行結果を示す値がシステム変数statに返されます。 ^ ノーマル実行は、新しく起動したアプリケーションのウインドゥがアクティブになり、 入力フォーカスも移りますが、マルチタスクで、HSPは終了せずに実行を続けます。 ^ タスク実行待ちの時は、新しく起動したアプリケーションのウインドゥがアクティブになり、 入力フォーカスも移ります。HSPは、起動したアプリケーションが終了するか、 入力フォーカスがHSPに戻るまで、実行を中断します。 ^p 例: exec "calc" ; Windows電卓を起動 ^p また、ファイル名に続けてパラメータを書くこともできます。 ^p 例: exec "notepad hsp.txt" ; ノートパッドでhsp.txtを開く ^p モード2は指定したアプリケーションを最小化した状態で実行します。 DOSアプリケーションの実行時にHSPの画面を遮ることなくバックで実行させることができます。 ^ モード16は、実行ファイルではなく、データファイルを指定してその拡張子に関連付けられたアプリケーションを実行します。 ^p 例: exec "hsp.txt",16 ; hsp.txtを関連付けられたアプリケーションで開く ^p 上の例では、「hsp.txt」を関連付けされたアプリケーションで開きます。(通常は、notepad.exe) また、モード16ではインターネットのURLを指定することでインターネットショートカットとしても使用することが可能です。 ^p 例: exec "http://www.at-m.or.jp/~onitama/",16 ; インターネットのページを開く ^p モード32では、指定したファイルに関連付けされたアプリケーションを経由して、プリンタに印刷をします。 たとえば、 ^p 例: exec "hsp.txt",32 ; hsp.txtをプリンタで印刷 ^p は、「txt」に関連付けされたアプリケーションで「hsp.txt」を自動的に印刷します。印刷のオプションなどはすべて、関連付けされたアプリケーションで指定されたものになります。 ^ モードは、複数同時に指定することが可能です。 たとえば、モード2とモード1を同時に指定する場合は、それぞれの値を加算して3になります。 この場合は、「最小化モードでタスク実行待ち」になります。 %href %index end プログラム終了 %group プログラム制御命令 %inst HSPのプログラムを終了します。 end命令はスクリプトのどこにあってもかまいません。 end命令が実行されると、そのアプリケーションは終了します。 ^ スクリプトの最後まで達した場合も、同様にHSPのプログラムを終了します。 %href stop %index gosub 指定ラベルにサブルーチンジャンプ %group プログラム制御命令 %prm *label *label : ラベル名 %inst サブルーチンジャンプをします。 gosub命令は、*labelで指定した場所にジャンプをします。 その後、return命令があるとgosub命令の次の行に復帰して実行を続けます。 gosub〜returnは最大32重までネスティングが可能です。 %href goto return %index goto 指定ラベルにジャンプ %group プログラム制御命令 %prm *label *label : ラベル名 %inst 指定したラベルに無条件でジャンプします。 以降は、ラベル名で指定された場所から実行を続けます。 %href gosub %index if 条件を満たしていればその行の命令を実行 %group プログラム制御命令 %prm p1 p1 : 条件式 %inst p1の条件式が満たされていれば、それ以降の命令を 実行する。満たされていない場合は、次の行に移ります。 BASICと違い、その行の次の命令との間には:(コロン)を 入れなければいけないので注意してください。 ^p 例: a=10 if a=10 : mes "aは10です。" ^p 上の例では、「a=10」の部分が条件式になります。条件式には主に、 ^p a=b aとbは等しい a!b aとbは等しくない ab aはbよりも大きい a<=b aはbよりも小さいか等しい a>=b aはbよりも大きいか等しい ^p を使います。if+条件式の後は:(コロン)で区切り、それに続いて 条件が満たされた場合に実行される部分を書きます。 (C言語やJavaと同じように「=」「!」を「==」「!=」のように記述することも可能です) もし、条件によってプログラムの流れを変えたい場合には、 ^p 例: a=10 if a>10 : goto *over10 mes "aは10以下です。" stop *over10 mes "aは10より大きいです。" stop ^p 上のように、goto命令で別なラベルに飛ばすことも可能です。 また、else命令を使って条件が満たされなかった場合の処理を同じ行に書く ことも可能です。 ^p 例: a=10 mes "aは、" if a=10 : mes "10です。" : else : mes "10ではありません。" stop ^p この場合は、else命令のある部分までは、条件を満たした場合に実行され、 else命令以降は、条件を満たされなかった場合に実行されます。 次の行以降は、条件に関わらず通常通りに実行されます。 ^ より複雑な条件判断をするために、論理演算式を使うこともできます。 ^p a&b aとbがともに正しい (and) a|b aとbのどちらかが正しい (or) ^p これによって複数の条件を一度に記述することができます。 ^p 例: a=10:b=20 if (a=10)|(b=10) : mes "aかbのどちらかが10です。" ^p 上の例では、「a=10」と「b=10」という条件式を|(or)でつないで、 どちらかが正しい場合には、正しいという結果が出るようにしています。 論理演算は、「|」「&」といった記号の他に「or」「and」という文字列 でも記述することができます。 ^p 例: if (a=10)or(b=10) : mes "aかbのどちらかが10です。" ^p 上のように書いても、結果は同じになります。 ^ if命令の条件が正しい時に実行されるスクリプトを複数行に渡って記述する場合は、 ^p 例: a=10 if a>5 { mes "TRUE" mes "(MULTILINE IF)" } ^p のように「{」で始めて「}」で終わる部分までを指定します。 (上の例では、見やすくするためにC言語風に行の最初にTABを入れてありますが、 特に必要なものではありません。ユーザーの見やすいように記述してください) ^ else命令でも複数行の指定ができます。 ^p 例: a=10 if a>5 { mes "TRUE" mes "(MULTILINE IF)" } else { mes " FALSE" mes " (MULTILINE IF)" } return ^p ただし、elseの後に「{」を記述しなければ複数行にはならないので注意して ください。 %href %index loop ループの始まりに戻る %group プログラム制御命令 %inst repeat命令で指定したループの終わりを指定します。 詳しくはrepeat命令の項を参照してください。 %href repeat %index onexit 強制終了時にジャンプ %group プログラム制御命令 %prm *label *label : ラベル名 %inst クローズボックス(ウインドゥ右上の終了ボタン)を押した時に、 自動的にジャンプする場所を指定します。 ^ 通常は、クローズボックスを押すとどのような時でも強制終了 してしまいますが、この命令が実行された以降は、クローズ ボックスを押すとonexit命令で指定したラベルにジャンプし、 そこから実行を続けるようになります。 ^ 終了時に確認メッセージを表示したい時、終了したらデータを 保存するようにしたい時などに使います。 ^ この命令が実行されると、end命令以外ではスクリプトの実行が 止められなくなるので、十分に注意して使ってください。 ^ onexitでジャンプされた直後は、システム変数iparamに終了要因が 値として保存されています。 iparamが0の場合は、ユーザーの意思でプログラムを終了。 iparamが1の場合は、Windowsシャットダウン(再起動または電源OFF)による終了です。 Windowsシャットダウン時の終了処理には、await、wait、stop命令 などでシステムにアイドルタイム(待ち時間)を発生させた場合には、 シャットダウン処理を中止します(シャットダウンされません)。 await、wait、stop命令を使わずにend命令で終了した場合には、 そのままシャットダウン処理が継続されます。 ^ 終了時ジャンプの一時的なON/OFFをすることも可能です。 ^p onexit 0 ^p で一時的に割り込みを停止します。 ^p onexit 1 ^p で一時停止した割り込みを再開させることができます。 %href onkey onclick onerror %index return サブルーチンから復帰 %group プログラム制御命令 %inst gosub命令で呼び出しされたサブルーチンを終了します。 gosub〜returnは最大10重までネスティングが可能です。 %href gosub %index run 指定したファイルに制御を移す %group プログラム制御命令 %prm "filename","cmdline" "filename" : 実行するHSPオブジェクトファイル名 "cmdline" : システム変数cmdlineに代入される文字列 %inst 別のファイルに書かれたHSPのプログラムを実行します。 指定するファイルはHSPのオブジェクトファイル(拡張子がAX)でなければ なりません。 オブジェクトファイルは、スクリプトエディタの「オブジェクトファイル作成」 によって作成することができます。 ^p 例: run "MENU2.AX","-s" ^p が実行されると、いままでのプログラムはなくなり"MENU2.AX" というファイルのプログラムが最初から実行されます。 画面の状態は維持されますが、変数、メモリバッファの内容は すべて初期化されます。 また、「-s」という文字列がシステム変数cmdlineに代入された状態で 実行が開始されます。 ^ cmdlineパラメーターが省略された場合は、システム変数cmdlineの内容は 空になります。また、システム変数cmdlineは最大1024文字まで内容が保存 されます。 %href %index skiperr エラースキップ設定 %group HSPシステム制御命令 %prm p1 p1 : エラースキップモードの設定(0) %inst エラースキップモードの設定をします。モードを1にした場合 には、HSP実行中にエラーが起こっても、エラーメッセージを出 さずにそのまま実行を続けます。モードを0にすると、解除され ます。 ^ エラースキップモード時にエラーが起こるとシステム変数err にエラーコードを入れて実行を続けます。この命令は、ファイル 操作など限られた命令でのエラーを無効にするためのもので、 むやみに使うと一般保護違反などの致命的なエラーが起こる可能 性があります。 %href %index stop プログラム中断 %group プログラム制御命令 %inst プログラムの実行を一時中断します。 ボタンがクリックされるまで待つ時などに使用します。 %href end %index wait 一定時間待つ %group プログラム制御命令 %prm p1 p1 : 待ち時間(10ms単位) %inst プログラムの実行を一定時間だけ中断します。 ^ p1に待ち時間の長さを指定します。単位は10ミリ秒になります。 (1ミリ秒=1/1000秒) CPUの速度に関係なく、どんな機種でも同じ待ち時間になります。 p1に0を指定した場合、または省略をした場合は、前回と同じ 時間だけ待ちます。 ^ await命令を使うとwait命令よりも高精度で細かいウエイトが可能ですが、 wait命令よりもCPUのタスクを消費します。 リアルタイムに画像を書き換えるなどの処理でなければ、wait命令を使用した方がCPU(Windows)の負担が軽くなります。 常にデスクトップに配置するようなアクセサリにはwait命令を、 ゲームアプリケーションなどにはawait命令を使うといった使い分けをするといいでしょう。 ^ HSPでは、他のWindowsタスクに処理時間を渡すために長い時間ループが 起こる可能性がある場所にはwaitかawait命令を入れることを推奨しています。 waitやawait命令がない命令の中を長い時間ループするようなプログラムを実行すると、 ウインドゥをドラッグしにくくなったり、他のタスクに移るのに時間がかかったりします。 %href await %index repeat ループの始まりの場所を示す %group プログラム制御命令 %prm p1,p2 p1=1〜(-1) : ループ回数 p2=0〜(0) : システム変数cntのスタート値 %inst repeat〜loopの間をくり返し実行します。 repeat命令は、くり返しの開始地点を示します。 loop命令は最後に通過したrepeat命令まで戻ります。つまり、 ^p repeat 5 print "やっほー" loop ^p のようなプログラムは、「やっほー」を5回表示します。 repeat命令のパラメータ、p1でくり返しの回数を指定することが できます。回数の指定を省略、またはマイナス値を指定すると 無限ループになります。 繰り返しの回数が0の場合は、繰り返し部分は実行されず対応する loop命令までジャンプします。 ^ repeat〜loopを含む部分をさらにループさせるネスト構造も記述 することができます。ただし、正常にloop命令を通ってループ しないで抜けたりすると、ネスト構造がおかしくなるのでループ から強制的に抜けるような構造にはしないようにしてください。 ^ ループ回数を調べたい時や、カウンターを利用したい時のために システム変数cntを参照することができます。cntは通常、0から スタートして、loop命令でループするたびに1づつ増えていきます。 ただし、repeat命令のp2でカウンタがスタートする数値を変更する ことも可能です。たとえば、repeat 3,1 のように指定した場合 には、変数cntの値は1,2,3の順で変化します。 ^ ループの内部で、強制的にループを抜け出す場合には、break命令 を使用してください。また、ループをやり直すためのcontinue命令 も用意されています。 %href loop break continue %index break ループから抜ける %group プログラム制御命令 %inst repeat〜loop間のループから、強制的に抜け出します。 ^p repeat 5 if cnt=2 : break mes "繰り返し["+cnt+"]" loop ^p 上の例では、システム変数が2になった時点、つまり3回目のループになると、 if命令の判断によって、break命令が実行されるしくみになっています。 break命令が実行されると、繰り返しの回数がまだ残っていても、強制的に繰り返し から抜け出し、loop命令の次にある命令から実行を続けます。 break命令以降(上の例では、mes命令)は実行されません。 この命令を使うと、たとえば次のようなスクリプトが作成可能です。 ^p repeat getkey a,1 if a>0 : break await 10 loop ^p 上のスクリプトでは、マウスの左ボタンを押すまで待つループになります。 repeat命令の回数指定を省略すると無限ループになるので、それを利用して ボタンの状態が1になるまでは、ずっと同じところを繰り返すようになって います。ボタンが押されると、break命令が実行され繰り返しから抜け出します。 %href repeat loop continue %index continue ループをやり直す %group プログラム制御命令 %prm p1 p1 = 0〜 : 繰り返しカウンタ変更値 %inst repeat〜loop間のループをやり直します。 continue命令が実行されると、repeat命令まで戻り次の繰り返しを実行します。 ^p repeat 5 if cnt=2 : continue mes "cnt="+cnt loop ^p 上の例では、システム変数cntが2になった時点で、continue命令が実行される しくみになっています。 上のスクリプトが実行されると、 ^p cnt=0 cnt=1 cnt=3 cnt=4 ^p のような表示になり、システム変数cntが2の時だけmes命令が実行されないのが わかります。 最初はわかりにくいかもしれませんが、continue命令は、loop命令の場所ではないが、 loop命令と同じ働きをするとも言えます。 繰り返しのカウンタは、continue命令が実行された場合でも、loop命令と同様1つ 増加します。もし、最後の繰り返しでcontinue命令が実行されると、repeat〜loopが 終わった状態、つまりloop命令の次の命令から実行を続けます。 ^ さらにもう1つ、continue命令にはパラメータを指定する使い方が存在します。 continueの後に、数値または数値型変数を指定することにより、繰り返しのカウンタ を示すシステム変数cntの内容を変更することができます。 たとえば、「continue 1」と指定した場合は、システム変数cntの内容は1になり、 その値のままrepeat命令の次から繰り返しを続けます。 パラメータを省略して、ただの「continue」だけの場合はloop命令と同様の処理、 数値を指定すると、カウンタの値を変更して繰り返しをやり直すことになります。 ですから、 ^p repeat 1 await 10 getkey a,1 if a=0 : continue 0 loop ^p このようなスクリプトでは、通常1回だけしか実行されないはずの、repeat〜loopの 繰り返しですが、マウスの左ボタンが押されていない場合は、カウンタが0に戻され 無限ループの状態になります。これで、ボタンを押すまで待つという動作になります。 %href repeat loop break %index onkey キー割り込み実行指定 %group プログラム制御命令 %prm *label *label : ラベル名 %inst キーボードを押した時に、自動的にジャンプする場所を指定します。 ^ onkey命令でラベルを指定すると、それ以降はHSPのウインドゥがアクティブな時に キー入力があるたびに*labelで指定したラベルにジャンプします。 ^ 割り込みジャンプは、stop命令および、wait、await命令で停止している時に 割り込みを受け付けてジャンプを行います。 また、割り込みによりジャンプを行なった後はシステム変数iparam、wparam、lparam がセットされます。 ^p 割り込み要因 | iparam | wparam | lparam --------------------------------------------------------------------- onkey | 文字コード | wParam | lParam ^p システム変数iparamには、割り込み要因ごとのパラメータが代入されます。 また、wparam,lparamはWindowsメッセージとして渡されたパラメータが そのまま格納されています。 イベント割り込み実行の一時的なON/OFFをすることも可能です。 ^p onkey 0 ^p で一時的にキー割り込みを停止します。 ^p onkey 1 ^p で一時停止したキー割り込みを再開させることができます。 %href onclick onexit onerror %index onclick クリック割り込み実行指定 %group プログラム制御命令 %prm *label *label : ラベル名 %inst マウスのボタンを押した時に、自動的にジャンプする場所を指定します。 ^ onclicky命令でラベルを指定すると、それ以降はHSPのウインドゥ上で マウスクリックがあるたびに*labelで指定したラベルにジャンプします。 ^ 割り込みジャンプは、stop命令および、wait、await命令で停止している時に 割り込みを受け付けてジャンプを行います。 また、割り込みによりジャンプを行なった後はシステム変数iparam、wparam、lparam がセットされます。 ^p 割り込み要因 | iparam | wparam | lparam --------------------------------------------------------------------- onclick | マウスボタンID | wParam | lParam ^p システム変数iparamには、割り込み要因ごとのパラメータが代入されます。 また、wparam,lparamはWindowsメッセージとして渡されたパラメータが そのまま格納されています。 イベント割り込み実行の一時的なON/OFFをすることも可能です。 ^p onclick 0 ^p で一時的に割り込みを停止します。 ^p onclick 1 ^p で一時停止した割り込みを再開させることができます。 %href onkey onexit onerror %index onerror エラー発生時にジャンプ %group プログラム制御命令 %prm *label *label : ラベル名 %inst スクリプトが原因でHSP内部でエラーが発生した時に、 自動的にジャンプする場所を指定します。 通常は、エラー発生時にシステムのエラーメッセージダイアログが表示 されますが、そのかわりに指定したラベルにジャンプするように設定 されます。ジャンプ後は、以下のシステム変数に情報が代入されます。 ^p wparam : エラー番号 lparam : エラー発生行番号 iparam : 0(なし) ^p onerror命令によりエラー後の処理を指定した場合であっても、 必要な処理が終わったら、そのままアプリケーションの実行は再開 せずに、なるべくend命令で終了させてください。 onerror命令は、エラーから回復させるものではありません。 エラー発生の原因によっては、HSPのシステム自体が不安定になったり 障害が発生することも有り得ます。 onerror命令を使う場面としては、実行ファイル作成時にエラーが 発生した場合にアプリケーション側で独自のエラー表示を行ないたい 場合や、特定のエラーが発生する場合にだけデバッグのための表示を 行なうなどが考えられます。 ^ 終了時ジャンプの一時的なON/OFFをすることも可能です。 ^p onexit 0 ^p で一時的に割り込みを停止します。 ^p onexit 1 ^p で一時停止した割り込みを再開させることができます。 %href onkey onclick onexit %index exgoto 指定ラベルに条件ジャンプ %group プログラム制御命令 %prm val,p1,p2,*label val : 比較に使用される変数 p1 : 比較フラグ p2 : 比較値 *label : ラベル名 %inst valで指定された変数に代入されている値と、p2の比較値により 指定したラベルに条件でジャンプします。 比較方法は、p1の比較フラグが0以上(正値)の場合は(valの値>=p2)が成立した時にジャンプ、 p1が-1以下(負値)の場合は(valの値<=p2)が成立した時にジャンプを行ないます。 この命令は、forなど一部のマクロ処理を高速化するために用意された命令です。 exgoto命令を単体で使用することもできますが、スクリプトの視認性からもif命令による 通常の条件分岐を行なうことを推奨致します。 %href goto if %index on 数値による分岐 %group プログラム制御命令 %prm p1 goto/gosub ラベル0,ラベル1… p1=0〜(0) : 分岐のための値 ラベル0〜 : 分岐先のラベル名 %inst on命令は、p1で指定された値が0,1,2…に応じて分岐先を選択します。 「on 数値 goto」または、「on 数値 gosub」のような書式で、続いて 分岐する先のラベルを1つ以上「,」で区切って記述することができます。 指定された数値が0の場合はラベル0が、数値が1の場合はラベル1が分岐の 対象になります、以降2,3,4…と対応したラベルを任意の数だけ記述して いくことが可能です。 「on 数値 goto」の場合はgoto命令と同じ単純な分岐、「on 数値 gosub」 の場合はgosub命令と同じサブルーチンジャンプを行ないます。 数値がマイナス値か、対応したラベルが指定されていない場合は分岐は 行なわれずに次の行に進みます。 n88系のBASICと違い最初のラベルが数値0に対応しているのでご注意下さい。 (n88系BASICでは数値1が最初のラベルになります) %href goto gosub %sample a=1 on a goto *a0,*a1,*a2 mes "その他":stop *a0 mes "A=0":stop *a1 mes "A=1":stop *a2 mes "A=2":stop %index while 条件付き繰り返し開始 %group プログラム制御マクロ %prm p1 p1=条件式(1) : 繰り返しを行なう条件 %inst whileに続く条件が満たされている間だけ、whileからwendまでを繰り返します。 条件が満たされていない場合はねwhileからwendまでを実行しません。 whileに続く条件を省略した場合は、無限に繰り返しを行ないます。 ^p a=0 while a<5 a=a+1:mes "A="+a wend ; aが5以下の間だけwhile以下を繰り返す ^p また、_continue、_breakマクロによって再開、脱出が可能です。 while〜wend制御は、プリプロセッサのマクロ機能を使って実現されています。 CやJava等に近い記述をしたいような場合にお使い下さい。 初心者の方には、repeat〜loop命令か、if命令による繰り返し記述を推奨します。 %href _continue _break wend %index wend 条件付き繰り返し終了 %group プログラム制御マクロ %inst whileで指定した繰り返し区間の終わりを指定します。 詳しくはwhileマクロの項を参照してください。 %href while %index until 条件付き繰り返し終了 %group プログラム制御マクロ %prm p1 p1=条件式(1) : 繰り返しを行なう条件 %inst untilに続く条件が満たされるまで、doからuntilまでの部分を繰り返します。 条件が満たされている場合でも、最低一回はdo〜until内を実行します。 untilに続く条件を省略した場合は、繰り返しを行ないません。 ^p a=0 do a=a+1:mes "A="+a until a>5 ; aが5以上になるまでdo以下を繰り返す ^p また、_continue、_breakマクロによって再開、脱出が可能です。 do〜until制御は、プリプロセッサのマクロ機能を使って実現されています。 CやJava等に近い記述をしたいような場合にお使い下さい。 初心者の方には、repeat〜loop命令か、if命令による繰り返し記述を推奨します。 %href _continue _break do %index do 条件付き繰り返し開始 %group プログラム制御マクロ %inst untilまでの繰り返し区間の始まりを指定します。 繰り返し条件は、untilマクロによって記述されます。 詳しくはuntilマクロの項を参照してください。 %href until %index for 指定回数繰り返し開始 %group プログラム制御マクロ %prm val,p1,p2,p3 val : 変数名 p1(0) : 初期値 p2(0) : 終値 p3(1) : 増分 %inst パラメーターとして変数名、初期値、終値、増分などを指定すると、 for〜nextの間を指定回数繰り返します。 カッコ内は省略した場合の値です。変数名は省略できません。 指定された変数をカウンターとして使用し、初期値から始まって、 1回繰り返すごとに増分を足していきます。終値に達した時点で、 繰り返しから抜けます(終値はループに含みません)。 最初から終値の条件が満たされている場合は、繰り返しを実行しません。 また、_continue、_breakマクロによって再開、脱出が可能です。 ^p for a,0,5,1 mes "A="+a next ; aが0から4の間(5回)繰り返す ^p この例では、変数aは0,1,2,3,4と5回繰り返してループを終わります。 増分にマイナス値を指定することも可能です。 ^p for a,5,0,-1 mes "A="+a next ; aが5から1の間(5回)繰り返す ^p この場合、変数aは5,4,3,2,1と5回繰り返してループを終わります。 for〜next制御は、プリプロセッサのマクロ機能を使って実現されています。 CやJava等に近い記述をしたいような場合にお使い下さい。 初心者の方には、repeat〜loop命令か、if命令による繰り返し記述を推奨します。 forマクロは、内部でマクロ展開後に特殊なプログラム制御命令exgotoを生成します。 %href _continue _break next exgoto %index next 指定回数繰り返し終了 %group プログラム制御マクロ %inst forで指定した繰り返し区間の終わりを指定します。 詳しくはforマクロの項を参照してください。 %href for %index switch 比較ブロック開始 %group プログラム制御マクロ %prm p1 p1 : 比較元 %inst switch〜case〜swendは、ブロック内に複数の条件判断と処理をまとめて 書くことができる構文です。 p1で指定する比較元のパラメーターは、変数または式を指定することができます。 switch以降は、 ^ case 比較値 ^ を置くことで、これ以降に「比較元」が「比較値」と同じだった場合に処理する 内容を記述することができます。 caseは、ブロック内に複数記述することができ、それぞれの比較値ごとの処理を 指定できます。caseの比較が正しい場合は、swbreakが存在するまで以降の命令を 実行します。また、caseの替わりに ^ default ^ を置くと、caseで指定したどの比較値にもあてはまらない条件の場合に 以降が実行されます。 ^ switchブロックが終了した場合は、 ^ swend ^ を必ず最後に書いておく必要があります。 以下は、switchマクロを使用したスクリプトの例です。 ^p a=0 switch a ; aを比較対象とする case 0 ; aが0だった場合 mes "A=0" swbreak ; case0の条件実行終了 case 1 ; aが1だった場合 mes "A=1" default ; aが0以外だった場合 mes "A!=0" swbreak swend ^p この例では、変数aの内容が0か1かそれ以外かで条件分岐を行なっています。 「case 0」以降は、「swbreak」までが実行されますが、「case 1」の場合は、 「swbreak」が存在しないため、「default」以降に実行される「mes "A!=0"」も 含めて実行されるので注意してください。 %href case default swbreak swend %index swend 比較ブロック終了 %group プログラム制御マクロ %inst switchで指定した比較ブロックの終わりを指定します。 詳しくはswitchマクロの項を参照してください。 %href switch case default swbreak %index default デフォルト比較指定 %group プログラム制御マクロ %inst switch〜swendの比較ブロック内で、それまでのcaseにあてはまらない条件の時に 実行される処理を指定します。 詳しくはswitchマクロの項を参照してください。 %href switch case swbreak swend %index case デフォルト比較指定 %group プログラム制御マクロ %prm p1 p1 : 比較値 %inst switch〜swendの比較ブロック内で、比較元との条件を指定して正しい場合に 実行される処理を指定します。 詳しくはswitchマクロの項を参照してください。 %href switch default swbreak swend %index swbreak 比較実行脱出指定 %group プログラム制御マクロ %inst switch〜swendの比較ブロック内から脱出します。 詳しくはswitchマクロの項を参照してください。 %href switch default case swend %index _continue マクロループをやり直す %group プログラム制御マクロ %inst 標準マクロによって定義されている繰り返しマクロ、 while〜wend、do〜until、for〜next間のループをやり直します。 現在以降の繰り返しブロック内は実行せずに、次の繰り返しから再開されます。 %href _break while wend do until for next %index _break マクロループを脱出する %group プログラム制御マクロ %inst 標準マクロによって定義されている繰り返しマクロ、 while〜wend、do〜until、for〜next間のループから抜け出します。 現在以降の繰り返しブロック内は実行せずに、ループの次にある命令から再開されます。 %href _continue while wend do until for next