; ; HSP help manager用 HELPソースファイル ; (先頭が「;」の行はコメントとして処理されます) ; %type 内蔵命令 %ver 3.0 %note ver3.0標準命令 %date 2004/10/12 %author onitama %url http://www.onionsoft.net/ %index alloc バッファを確保 %group メモリ管理命令 %prm p1,p2 p1=変数 : バッファを割り当てる変数名 p2=1〜(64) : バッファのサイズ(Byte単位) %inst メモリ上にバッファを作成して変数に割り当てます。 割り当てられた変数は、文字列型となります。 ^ この命令は過去のHSP命令との互換を取るために用意されています。 通常は、sdim命令を使用することを推奨します。 ^ ※この命令は、マクロとしてhspdef.as内で定義されています。 %href sdim memexpand %index dim 配列変数を作成 %group メモリ管理命令 %prm p1,p2... p1=変数 : 配列を割り当てる変数名 p2=0〜 : 要素の最大 %inst 任意の要素を持つ配列変数を作成します。 ^p 例: dim a,20 ^p 上の例では、変数aの要素を20個、つまり「a(0)」〜「a(19)」までをあらか じめ確保します。 ^ パラメータを増やすことで多次元配列を作成することも可能です。 ^p 例: dim a,10,5 : 変数aは2次元配列 a(0,0)=1 : 要素(0,0)に1を代入 a(1,0)=2 : 要素(1,0)に2を代入 a(0,1)=3 : 要素(0,1)に3を代入 ^p 上の例では、a(0,0)から、a(9,4)までを使用できるようになります。 多次元配列は、4次元まで確保することが可能です。 ^ dim命令はスクリプト内のどこででも定義・再定義することが可能です。 また、配列変数を作成すると内容はすべて0にクリアされます。 %href sdim ddim dimtype %index dimtype 指定タイプの配列変数を作成 %group メモリ管理命令 %prm p1,p2,p3... p1=変数 : 配列を割り当てる変数名 p2=型タイプ : 変数の型タイプ p3=0〜 : 要素の最大 %inst 任意の要素を持つ配列変数を作成します。 dim命令と同様の動作ですが、dimtypeは変数の型を指定することができます。 p2には、変数型を示す型タイプ値を指定する必要があります。 型タイプ値は、vartype関数で型名文字列から取得することが可能です。 ^p 例 : dimtype a,vartype("double"),20 ^p 上の例では、実数型変数aの要素を20個、つまり「a(0)」〜「a(19)」までを あらかじめ確保します。 dim命令と同様に多次元配列を確保することが可能です。 多次元配列は、4次元まで確保することが可能です。 %href dim sdim ddim vartype %index poke バッファに1byte書き込み %group メモリ管理命令 %prm p1,p2,p3 p1=変数 : バッファを割り当てた変数名 p2=0〜 : バッファのインデックス(Byte単位) p3(0) : バッファに書き込む値 または 文字列(Byte単位) %inst 変数に保存されたデータメモリ上の任意の場所にある 1バイトの内容を書き換 えます。 ^ p1で指定した変数のバッファ上で、p2で指定したインデックスの場所にp3の値 を書き込みます。値は0〜255までの1バイト(8bit)値になります。 ^ p3に文字列を指定した場合には、文字列データをメモリに展開し、 strsizeに、書き込まれた文字列の長さを返します。 %href wpoke lpoke %index wpoke バッファに2byte書き込み %group メモリ管理命令 %prm p1,p2,p3 p1=変数 : バッファを割り当てた変数名 p2=0〜 : バッファのインデックス(Byte単位) p3=0〜(0) : バッファに書き込む値(16bit整数値) %inst 変数に保存されたデータメモリ上の任意の場所にある 2バイトの内容を書き換 えます。 ^ p1で指定した変数のバッファ上で、p2で指定したインデックスの場所にp3の値 を書き込みます。値は0〜65535までの2バイト(16bit)値になります。 %href poke lpoke %index lpoke バッファに4byte書き込み %group メモリ管理命令 %prm p1,p2,p3 p1=変数 : バッファを割り当てた変数名 p2=0〜 : バッファのインデックス(Byte単位) p3=0〜(0) : バッファに書き込む値(32bit整数値) %inst 変数に保存されたデータメモリ上の任意の場所にある 4バイトの内容を書き換 えます。 ^ p1で指定した変数のバッファ上で、p2で指定したインデックスの場所にp3の値 を書き込みます。値は0〜$ffffffffまでの4バイト(32bit)値になります。 %href poke wpoke %index sdim 文字列型配列変数を作成 %group メモリ管理命令 %prm p1,p2,p3... p1=変数 : 配列を割り当てる変数名 p2=1〜 : デフォルト文字数 p3=0〜 : 要素の最大 %inst 文字列型の配列変数を作成します。 dim命令との違いは、 p2のパラメータは 「文字列のデフォルト文字数」、p3のパラメータ以降に実際の配列要素の最大 数を入れるところです。 ^p 例 : sdim a,5000 ; 変数aは5000文字ぶんのメモリをあらかじめ確保します ^p 上の例では、変数aは5000文字ぶんのメモリを確保し配列変数にはなりません。 デフォルト文字数は、あらかじめ確保しておくメモリを指定することで、自動 拡張時に余計な処理がかからなくなるというものです。 デフォルト文字数が少ない場合には、長い文字列が代入されるたびに何度も文 字列バッファの再確保が発生するため効率が落ちることがあります。 ^ 多次元配列の場合は、文字数とは別に4次元まで確保することが可能です。 sdim命令はスクリプト内のどこででも定義・再定義することが可能です。 また、配列変数を作成すると内容はすべて0にクリアされます。 %href dim ddim dimtype %index ddim 実数型配列変数を作成 %group メモリ管理命令 %prm p1,p2... p1=変数 : 配列を割り当てる変数名 p2=0〜 : 要素の最大 %inst 実数型の配列変数を作成します。 パラメーターは、dim命令と同様に要素の最大数を指定します。 ^p 例 : ddim a,100 ; 変数aはa(0)〜a(99)までの実数型配列を確保します ^p dim命令と同様に多次元配列を確保することが可能です。 多次元配列は、4次元まで確保することが可能です。 ddim命令はスクリプト内のどこででも定義・再定義することが可能です。 また、配列変数を作成すると内容はすべて0にクリアされます。 ^ ※この命令は、マクロとしてhspdef.as内で定義されています。 %href dim sdim dimtype %index memcpy メモリブロックのコピー %group メモリ管理命令 %prm p1,p2,p3,p4,p5 p1 : コピー先の変数 p2 : コピー元の変数 p3 : コピーするサイズ(1byte単位) p4 : コピー先の変数メモリオフセット(省略時=0) p5 : コピー元の変数メモリオフセット(省略時=0) %inst p1で指定された変数に割り当てられているメモリ領域に、 p2で指定された変数に割り当てられているメモリの内容をコピーします。 コピーするサイズ(1byte単位)は、p3で指定します。 大きな領域を変数に割り当てている場合などに高速なメモリコピーを 行なうことができます。 p4,p5で、コピー先、コピー元の開始位置を1byte単位で調整することができま す。 変数が確保している領域を越える指定がされている場合は、バッファオーバー フローのエラーになります。 %href memset memexpand %index memset メモリブロックのクリア %group メモリ管理命令 %prm p1,p2,p3,p4 p1=変数 : 書き込み先の変数 p2=0〜255(0) : クリアする値(1byte) p3=0〜(0) : クリアするサイズ(1byte単位) p4=0〜(0) : 書き込み先の変数メモリオフセット %inst 1byteの固定値でメモリブロックを埋めます。 p1で指定された変数に割り当てられているメモリ領域に、p2で指定された値を 、p3のサイズだけ書き込みます。大きな領域に同じ値を書き込みたい時に有効 です。p4で、メモリ開始位置を1byte単位で調整することができます。 変数が確保している領域を越える指定がされている場合は、バッファオーバー フローのエラーになります。 %href memcpy memexpand %index dup クローン変数を作成 %group 特殊代入命令 %prm 変数名1 , 変数名2 変数名1 : クローンを作成する変数名 変数名2 : クローン元の変数名 %inst クローン元の変数が持つメモリを指している変数を作成します。 クローン変数は、クローン元のメモリ情報を参照するための変数として機能す るようになります。 ^ クローン元の型が変更されたり、配列の拡張、または文字列バッファの拡張が 行なわれた場合には、クローンとしての動作は行なわれなくなります。 クローンが有効なのはクローン元の変数に代入が行なわれるまでの間だという 点に注意してください。dup命令は、以前のバージョンとの互換性維持と、 低 レベルでの変数バッファ操作を行なうための機能として残されています。 また、メモリアドレスから直接クローン変数を作成するdupptr命令も用意され ています。 初心者向けに、dup命令を推奨することはありません。 %href mref dupptr %index dupptr ポインタからクローン変数を作成 %group 特殊代入命令 %prm 変数名,p1,p2,p3 変数名 : クローンを作成する変数名 p1=0〜 : クローン元のメモリアドレス p2=0〜 : クローン元のメモリサイズ p3=1〜(4) : クローン変数の型指定 %inst 指定したアドレスポインタを指している変数を作成します。 クローン変数は、メモリ上の情報を参照するための数値型配列変数として機能 するようになります。 ^ p3で作成されるクローン変数の型を指定することができます。 p3の値は、vartype関数で取得される型を示す値と同じです。 p3を省略した場 合は、4(整数型)となります。 ^ クローン変数は、指し示しているメモリの位置が変更されてもそれを検知する ことはできません。たとえば、変数に格納されているデータのメモリアドレス を指し示していたとしても、変数の型や内容が更新されてメモリ位置が変更さ れた場合に正しく参照することはできません。 あくまでも、一時的なメモリ参照にのみ使用し、取り扱いには十分に注意して ください。dupptr命令は、 DLL等の外部関数で取り交わすメモリ参照や低レベ ルでの変数バッファ操作を行なうための機能として用意されています。 初心者向けに、dupptr命令を推奨することはありません。 %href mref dup %index mref 特殊なメモリを変数に割り当てる %group 特殊代入命令 %prm p1,p2 p1=変数名 : 割り当てられる変数名 p2=0〜(0) : リソースID (割り当てるメモリ内容) %inst p1で指定された変数に、p2で指定したメモリ内容を割り当てます。 ^p 値 : 対応するリソース -------------------------------------------------- 0〜 7 : ローカルパラメータ#1〜8(数値) 64 : システム変数stat 65 : システム変数refstr 66 : ウィンドウ内画像データ(VRAM) 67 : 現在のウィンドウ情報(BMSCR構造体) 68 : HSPのシステム情報(HSPCTX構造体) 69 : パレット情報 96〜 : ウィンドウID0〜の情報(BMSCR構造体) ^p リソースID64,65のシステム変数は、たとえば「mref i,64」とした場合、変数 aがシステム変数 statと同等になり、値を代入することができるようになりま す。これにより、ユーザー定義命令内の計算結果などをシステム変数に反映し て、呼び出し元に返すことができます。 ^ リソース66のウインドウ内画像データ(VRAMデータ)は、表示されている画像を 内容とする配列変数になります。 これにより、 poke,peek命令などで画像データに直接アクセスが可能になりま す。 ^ リソース67以降も同様に HSPの内部データに直接アクセスできるようにするも のですが、通常は使う必要はありません。 DLLへ渡すためのパラメータ準備の ためなど、ごく限られた用途のために用意されているもので、ほとんどの人は 使うことはないはずです。 ^ ローカルパラメータは、ユーザー定義命令(#deffunc)で新規に追加された命令 のパラメータ内容を取得するためのものです。 パラメータのタイプ(数値、変数、文字列)に従って取得することが可能です。 ローカルパラメータ取得は、HSP2.xまでのパラメーター取得方法との互換のた めに用意されています。(一部のリソースタイプには互換性がありません。) HSP3.0以降では、ユーザー定義命令(#deffunc)のエイリアス機能を使用するこ とを推奨しています。 %href dup dupptr #deffunc %index newmod モジュール型変数の作成 %group メモリ管理命令 %prm p1,p2,p3... p1 : 変数名 p2 : モジュール名 p3... : 初期化パラメーター %inst p1で指定した変数をモジュール型として要素の追加を行ないます。 p1の変数がモジュール型でない場合は、モジュール型として初期化されます。 すでにモジュール型の場合は、配列変数として新しい要素を追加していきます。 p2ですでに登録されているモジュール名を指定し、p3以降に初期化パラメータ ーを指定することができます。 モジュール変数は、複数の変数やデータをまとめて管理することができる新し いデータ格納方法を提供します。 ^p 例 : #module a x,y,z ^p 上の例では、aというモジュールにx,y,zという3つの変数を持たせています。 aというモジュールの型を持つ変数は、x,y,zという変数すべてを内包したもの になり、モジュール処理命令(#modfunc)で扱うことが可能になります。 ^p 例 : newmod v,a ^p 上の例では、モジュール「a」のための変数vを初期化します。 これで変数vには、モジュール「a」 が持つモジュール変数x,y,zという内容が 丸ごと格納されることになります。 モジュールごとに初期化のための命令(#modinit)を用意している場合は、p3以 降のパラメーターが初期化命令に渡されます。 ^p 例 : #module a x,y,z #modinit int p1,int p2,int p3 x=p1:y=p2:z=p3 return #global newmod v,a,1,2,3 ^p モジュール型の変数は、setmod命令やdelmod命令で要素の操作を行なうことが できるほか、 foreach命令などとともに複雑なデータを簡潔に処理することが できるようになります。 %href #modfunc #modinit #modterm setmod delmod foreach %index setmod モジュール型変数の再設定 %group メモリ管理命令 %prm p1,p2,p3... p1 : 変数名 p2 : モジュール名 p3... : 初期化パラメーター %inst p1で指定したモジュール型の変数の再初期化を行ないます。 p1は、すでにモジュール型として設定されている変数である必要があります。 ^p 例: setmod v.1,a ^p setmod命令は、newmod命令と同様に初期化ルーチン(コンストラクタ)が定義さ れている場合は、引数とともに呼び出しを行ないます。 モジュール型の変数についての詳細は、newmod命令のヘルプやプログラミング マニュアルを参照してください。 %href newmod delmod %index delmod モジュール型変数の要素削除 %group メモリ管理命令 %prm p1 p1 : 変数名 %inst p1で指定したモジュール型の変数の要素を削除します。 p1は、すでにモジュール型として設定されている変数である必要があります。 ^p 例 : delmod v.1 ^p delmod命令は、#modterm命令により解放ルーチン(デストラクタ)が定義されて いる場合は、自動的に呼び出しを行ないます。 モジュール型の変数についての詳細は、newmod命令のヘルプやプログラミング マニュアルを参照してください。 %href #modterm newmod setmod %index memexpand メモリブロックの再確保 %group メモリ管理命令 %prm p1,p2 p1 = 変数 : 対象となる変数 p2 = 0〜(64) : 再確保サイズ(1byte単位) %inst p1で指定された変数が持つメモリ領域の再確保を行ないます。 代入時などのメモリ領域確保はシステムが自動的に行なっていますが、 明示的にサイズを変更する場合に使用します。 再確保を行なった場合でも、以前までの内容は保持されます。 p2で、再確保サイズを指定します。p2の値が64より小さい場合は自動的に64に 合わせられます。すでに確保されているサイズよりも小さな値を指定した場合 は何も行われません。 p1で指定される変数は、 文字列型(str)のように動的にメモリ確保量を変更す ることが可能な型である必要があります。 再確保ができない型の場合には、エラーになります。 %href memcpy memset alloc