hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
MakeHPI/cpp/chapter3 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

プラグインから任意のラベルにジャンプする

今回はjumpプラグインを例にラベルジャンプの方法を説明していきます。



コンパイラ

BCC 5.5.1

  • スクリプトに
      1
      2
      3
      4
      5
    
     
     
     
     
     
    
        jump *Label_1
        stop
     *Label_1
        mes "Hello, world !"
        return
    と書けばLabel_1にジャンプをして処理を実行し、ジャンプ元に処理を返すプラグインを作ります。
  • ラベルジャンプの方法を学ぶ。

ソースファイル

+  dllmain.cpp
+  jump.h
+  jump.cpp
+  jump.as(プラグイン定義ファイル)
+  jump.hsp(サンプル)
ラベルはラベルへのポインタで取得される
  1
  2
 
 
    label = code_getlb(); // ラベルポインタを取得
    code_call( label );   // ラベルへgosubジャンプ

スクリプトのラベルの位置はラベルへのポインタによって取得できます。
これを取得するのがcode_getlb()関数です。

この関数で得られたラベルポインタを使って実際に処理をジャンプさせることができます。
gotoによるジャンプはcode_setpc()を、gosubによるジャンプはcode_call()を呼び出します。
いずれもHSPEXINFO構造体の関数ポインタによって提供されています。

hsp3plugin.hでこれらを通常の関数のように扱えるように以下のように置換されるように定義されています。

  1
  2
  3
 
 
 
#define code_setpc exinfo->HspFunc_setpc
#define code_call exinfo->HspFunc_call
#define code_getlb exinfo->HspFunc_prm_getlb
スクリプトでのリターンコードについて

hspのreturnには通常のgosubによるパラメータ無しの復帰と、oncmdで見られるパラメータ付きの復帰があります。
hspのヘルプによるとreturnで数値を返すと値によってシステム変数にリターンコードが格納されるようです。

これはプラグインからでも簡単に取得できますがreturnで値を返したのか返さなかったのかは、HSPCTX構造体のretval_levelメンバを調べることで分かります。
retval_levelには値を返すreturnが最後に実行された時のサブルーチンレベルが格納されます。
パラメータ無しのreturnはretval_levelの値を書き換えません。

コメント

  • あ、分かった。returnコードについて・・・。これで目的のプラグインが作れるかも知れない。step1〜step3はその布石というわけでした・・・。勉強がてらレポートを残しておこうと思ったり、HSP開発wikiの守備範囲拡大を狙ったり・・・。これに続いて書く人が出てくれば尚良し^^; -- kz3 2006-01-13 (金) 11:31:54
  • ウインド表示とかオブジェクトの配置等だけHSPにやらして、本処理はhpiで...というやり方もありますね。 こっちが高速だったりしてね。(^^;) -- hiroki? 2006-01-13 (金) 12:07:43
  • 試験的にこのページだけ#regionを使ってみる。全部やっちゃうとFx使っている人が困るからなぁ^^; -- kz3 2006-01-20 (金) 05:56:17

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filemakefile
104件 [詳細]
filejump.hsp
213件 [詳細]
filejump.h
180件 [詳細]
filejump.cpp
220件 [詳細]
filejump.as
221件 [詳細]
filedllmain.cpp
249件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:31:02 (2436d)