; ; HSP help manager用 HELPソースファイル ; (先頭が「;」の行はコメントとして処理されます) ; %type 内蔵命令 %ver 3.0 %note ver3.0標準命令 %date 2004/10/12 %author onitama %url http://www.onionsoft.net/ %index await 一定時間待つ(ACTIVE) %group プログラム制御命令 %prm p1 p1=0〜(0) : 待ち時間(1ms単位) %inst プログラムの実行を一定時間だけ中断します。 ^ wait命令と似ていますが、 await命令は前回waitした時間からの待ち時間を指 定します。これにより、描画速度の違いなどから時間が早く過ぎることを防止 することができます。リアルタイムで更新される画面などの速度を一定に保つ 時に使用します。 ^ 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ノーマル実行 モード2 : 最小化モードで実行 モード16 : 関連付けされたアプリケーションを実行 モード32 : 指定したファイルを印刷する ^p "command"が指定された場合は、 "filename"で指定したファイルまたはフォル ダ名に対するコンテキストメニュー操作名となります。 コンテキストメニュー操作名は、レジストリに登録されているアクションを指 定する文字列で、標準で以下のようなものが用意されています。 ^p 操作名 | 説 明 --------------------------------------------------------------------- edit | エディタを開いて編集する。 explore | フォルダを選択して、エクスプローラを起動します。 open | 関連付けられたアプリケーションでファイルを開きます。 print | 関連付けられたアプリケーションでファイルを印刷します。 properties | ファイルまたはフォルダのプロパティを表示します。 ^p "command"が指定された場合は、ファイル実行モードの16、 32は無効になりま す。また、実行結果を示す値がシステム変数statに返されます。 ^ ノーマル実行は、新しく起動したアプリケーションのウィンドウがアクティブ になり、入力フォーカスも移りますが、マルチタスクで、 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とモード16を同時に指定する場合は、それぞれの値を加算し て18になります。この場合は、「最小化モードで関連付けされたアプリケーションを実行」 になります。 ^ ※HSP2.61までサポートされていたモード1(タスク実行待ち)は、HSP3.0では サポートしていません。起動したプロセスを監視するか、 コンソールアプリケーションの場合はpipeexec命令をご使用ください。 %href pipeexec %index end プログラム終了 %group プログラム制御命令 %prm p1 p1(0) : 終了コード %inst HSPのプログラムを終了します。 end命令はスクリプトのどこにあってもかまいません。 end命令が実行されると、そのアプリケーションは終了します。 ^ アプリケーションの終了コードをパラメーターp1で指定することができます。 p1を省略した場合は、0がアプリケーション終了コードとなります。 アプリケーション終了コードは、他のプロセスやバッチファイルへの通知に使 用されます。通常は、省略(0)していて問題ありません。 %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 foreach %index onexit 終了時にジャンプ %group プログラム制御命令 %prm goto/gosub *label *label : ラベル名 %inst クローズボックス(ウィンドウ右上の終了ボタン)を押した時に、自動的にジャ ンプする場所を指定します。 ^ onexitの後に続けて、 gotoまたはgosubキーワードを指定してからラベルを記 述します。 gotoの場合には、単純なプログラムジャンプ。 gosubの場合はサブルーチンジ ャンプを行ないます。 goto/gosubキーワードを省略した場合には、gotoキーワードと同等の動作にな ります。 ^p 例 : onexit gosub *exit_routine ; 終了時呼び出し ^p 通常は、クローズボックスを押すとどのような時でも強制終了してしまいます が、この命令が実行された以降は、クローズボックスを押すとonexit命令で指 定したラベルにジャンプし、そこから実行を続けるようになります。 ^ 終了時に確認メッセージを表示したい時、終了したらデータを保存するように したい時などに使います。 ^ この命令が実行されると、 end命令以外ではスクリプトの実行が止められなく なるので、十分に注意して使ってください。 ^ 複数のウィンドウを作成した場合は、いずれかのウィンドウにある終了ボタン で割り込みが発生します。この時、システム変数wparamに終了の通知を受けた ウィンドウIDが代入されます。 ^ 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 プログラム制御命令 %prm p1 p1 : システム変数代入値 %inst gosub命令やユーザー定義命令などで呼び出しされたサブルーチンを終了しま す。return命令により、スタックを戻し呼び出し元に復帰します。 p1を指定することにより、サブルーチンから値をシステム変数に反映させるこ とができます。 p1に数値を指定した場合には、システム変数statに代入されます。 p1に文字列を指定した場合には、システム変数refstrに代入されます。 p1に実数値を指定した場合には、システム変数refdvalに代入されます。 p1の指定を省略した場合には、システム変数の代入は行なわれません。 %href gosub #deffunc #defcfunc stat refstr refdval %index run 指定したファイルに制御を移す %group プログラム制御命令 %prm "filename","cmdline" "filename" : 実行するHSPオブジェクトファイル名 "cmdline" : システム変数dir_cmdlineに代入される文字列 %inst 別のファイルに書かれたHSPのプログラムを実行します。 指定するファイルはHSPのオブジェクトファイル (拡張子がAX)でなければなり ません。 オブジェクトファイルは、スクリプトエディタの「オブジェクトファイル作成」 によって作成することができます。 ^p 例 : run "MENU2.AX","-s" ^p が実行されると、いままでのプログラムはなくなり"MENU2.AX"というファイル のプログラムが最初から実行されます。 画面の状態は維持されますが、変数、メモリバッファの内容はすべて初期化さ れます。また、「-s」という文字列がシステム変数 dir_cmdlineに代入された 状態で実行が開始されます。 ^ "cmdline"パラメーターが省略された場合は、システム変数dir_cmdlineの内容は 空になります。また、システム変数 dir_cmdlineは最大1024文字まで内容が 保存されます。 %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 foreach %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 foreach %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 foreach loop break %index onkey キー割り込み実行指定 %group プログラム制御命令 %prm goto/gosub *label *label : ラベル名 %inst キーボードを押した時に、自動的にジャンプする場所を指定します。 ^ onkeyの後に続けて、gotoまたはgosubキーワードを指定してからラベルを記述 します。gotoの場合には、単純なプログラムジャンプ。 gosubの場合はサブル ーチンジャンプを行ないます。 goto/gosubキーワードを省略した場合には、gotoキーワードと同等の動作にな ります。 ^ 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 goto/gosub *label *label : ラベル名 %inst マウスのボタンを押した時に、自動的にジャンプする場所を指定します。 ^ onclickの後に続けて、gotoまたはgosubキーワードを指定してからラベルを記 述します。gotoの場合には、単純なプログラムジャンプ。 gosubの場合はサブ ルーチンジャンプを行ないます。 goto/gosubキーワードを省略した場合には、gotoキーワードと同等の動作にな ります。 ^ 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 goto/gosub *label *label : ラベル名 %inst スクリプトが原因で HSP内部でエラーが発生した時に、自動的にジャンプする 場所を指定します。 ^ onerrorの後に続けて、gotoまたはgosubキーワードを指定してからラベルを記 述します。gotoの場合には、単純なプログラムジャンプ。 gosubの場合はサブ ルーチンジャンプを行ないます。 goto/gosubキーワードを省略した場合には、gotoキーワードと同等の動作にな ります。 ^ 通常は、エラー発生時にシステムのエラーメッセージダイアログが表示されま すが、そのかわりに指定したラベルにジャンプするように設定されます。ジャ ンプ後は、以下のシステム変数に情報が代入されます。 ^p wparam : エラー番号 lparam : エラー発生行番号 iparam : 0(なし) ^p onerror命令によりエラー後の処理を指定した場合であっても、 必要な処理が 終わったら、そのままアプリケーションの実行は再開せずに、 なるべくend命 令で終了させてください。 onerror命令は、エラーから回復させるものではありません。 エラー発生の原因によっては、 HSPのシステム自体が不安定になったり障害が 発生することも有り得ます。 onerror命令を使う場面としては、実行ファイル 作成時にエラーが発生した場合にアプリケーション側で独自のエラー表示を行 ないたい場合や、特定のエラーが発生する場合にだけデバッグのための表示を 行なうなどが考えられます。 ^ 終了時ジャンプの一時的なON/OFFをすることも可能です。 ^p onerror 0 ^p で一時的に割り込みを停止します。 ^p onerror 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命令か、goto命令とif命令を組み合わせた繰り返し記述を推奨しま す。 %href _continue _break do %index do 条件付き繰り返し開始 %group プログラム制御マクロ %inst untilまでの繰り返し区間の始まりを指定します。 繰り返し条件は、untilマクロによって記述されます。 詳しくはuntilマクロの項を参照してください。 %href until %index for 指定回数繰り返し開始 %group プログラム制御マクロ %prm p1,p2,p3,p4 p1 : 変数名 p2(0) : 初期値 p3(0) : 終値 p4(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 %index foreach 変数の要素数だけ繰り返す %group プログラム制御命令 %prm p1 p1=変数名 : ループの対象となる変数 %inst 配列変数に格納されている要素の数だけ繰り返しを行ないます。 foreachは、repeat命令と同様にループ開始場所に記述し、 ループの終了場所 にloop命令を記述します。 repeat命令との違いは、指定された配列変数の要素数が繰り返し回数になる点 と、モジュール型変数の場合には、delmod命令で削除された要素はループ内容 を実行しないという点です。 ^p 例 : dim a,10 foreach a mes "#"+cnt+":"+a.cnt loop ^p ループの中で、システム変数cntを配列要素として指定することで、 すべての 要素を繰り返し実行させるような処理を簡潔に書くことができます。 また、break、continue命令もrepeat命令使用時と同じように機能します。 %href repeat loop break continue %index oncmd Windowsメッセージ割り込み実行指定 %group プログラム制御命令 %prm goto/gosub *label,p1 *label : ラベル名 p1 : メッセージID %inst 指定されたウィンドウメッセージが送られた時に、自動的にジャンプする場所 を指定します。 ^ oncmdの後に続けて、gotoまたはgosubキーワードを指定してからラベルを記述 します。 gotoの場合には、単純なプログラムジャンプ。 gosubの場合はサブルーチンジ ャンプを行ないます。 goto/gosubキーワードを省略した場合には、gotoキーワードと同等の動作にな ります。 ^ oncmd命令でラベルを指定すると、それ以降はHSPのウィンドウに対してp1のメ ッセージが送られた時に*labelで指定したラベルにジャンプします。 oncmd命令は、現在の操作先ウィンドウのみが対象になります。 複数のウィンドウを作成している場合は、 ウィンドウごとにoncmd命令による 登録が可能です。 ^ 既に登録されているウィンドウメッセージが指定された場合は、以前の登録が 無効になります。 また、割り込みの登録は、ウィンドウの初期化とは同期していません。 一度登録された割り込みは、アプリケーションが終了するまで有効になります。 ^ 割り込みジャンプは、stop命令および、wait、 await命令で停止している時に 割り込みを受け付けてジャンプを行います。 また、割り込みによりジャンプを行なった後はシステム変数iparam、wparam、 lparamがセットされます。 割り込みが発生したウィンドウIDは、 ginfo関数により取得することができま す。 ^p 割り込み要因 | iparam | wparam | lparam --------------------------------------------------------------------- oncmd | メッセージID | wParam | lParam ^p システム変数iparamには、送信されたメッセージIDが代入されます。 また、wparam,lparamはWindowsメッセージとして渡されたパラメータがそのま ま格納されています。 割り込みの設定で、 gosubキーワードによるサブルーチンジャンプが発生した 場合は、return命令により戻り値を設定することが可能です。 「return 数値」で、ウィンドウプロシージャーが返す値を指定します。 return命令にパラメーターを指定しなかった場合には、デフォルトのウインド ゥプロシージャーに処理が渡されます。 ^ イベント割り込み実行の一時的なON/OFFをすることも可能です。 ^p oncmd 0 ^p で一時的に割り込みを停止します。 ^p oncmd 1 ^p で一時停止した割り込みを再開させることができます。 %href onkey onclick onexit onerror