2008年02月03日

ユーザー命令定義の利用

 HSPにはユーザー定義の命令を用意できる。プリプロセッサ命令のdeffuncを使い、まさに自分専用の命令というのを宣言できる便利な機能となるわけです。機能的にいうと、HSPのサブルーチンジャンプに近いです。

#module

#deffunc meirei int a

a*=10
return a

#global


1. まず基本的に#module〜#globalでくくります。(モジュール別空間)
2. #deffuncを用意しする。最初のパラメータに実際にHSPスクリプト上で利用する命令名を記述する。ここでは「meirei」としてある。
3. 次にこの命令のパラメータを指定する。今回は1つのパラメータとして「int a」にしてある。intは整数値を意味し、変数名aはこのモジュール内で使う変数になる。
4. 宣言は終わったので、具体的な命令の処理を記述する。ここでは、「meirei」というユーザー定義命令の第1パラメータに指定した数値を10倍にしている
5. 最後に、システム変数statにその結果を返す。retrunのパラメータに結果を指定する変数aを用意してある。

 実際に利用するサンプルコードは下のようになった。
#module

;HSP命令宣言
#deffunc meirei int a

a*=10
return a ; 結果を返す

#global

meirei 10
mes "結果:"+stat+""

meirei 333
mes "結果:"+stat+""


 次は、パラメータ1とパラメータ2を足し算した結果を変えす処理。#deffuncに第2パラメータ用の宣言を「,」の後ろに追加すればいい。

#module

;HSP命令宣言
#deffunc meirei int a,int b

c = a*b
return c

#global


 文字をパラメータで扱うには#deffuncで「str」を指定する。


#module

#deffunc meirei str a,str b

data=a
cunt=0
repeat
check=instr(data,cunt,b)
if check=-1: kekka=cnt:break
cunt+=check+1
loop
return kekka

#global

meirei "DEFFUNC-HSP3-HSP-MODULE", "-"
mes stat


 このサンプルは、第1パラメータの文字列に第2パラメータの文字が何個含まれてるかチェックできる機能になってる。repeat・loopのループ中でinstr関数の文字検索を行い、ループのカウント値(HSPシステム変数cnt)を見ることで何個存在していたかが分かる仕組みになっている。
タグ:HSP
posted by hsp-seed at 00:00| ホノルル 晴れ| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2008年01月26日

HSPで計算する

計算します。
HSPを使えばすぐに答えが出ます。

かけ算は「*」(アスタリスク)、わり算は「/」(スラッシュ)で表現します

mes 1+1
mes 1000-400
mes 30*100
mes 10/2


足したりわったり。わり算を先にします。
mes 50+100/50


足し算を先にやりたいなら、括弧をつけます。(算数と同じ)
mes (50+100)/50


\(円マーク)はわり算の余りが出ます。
mes 5/2
mes 5\2
タグ:HSP
posted by hsp-seed at 11:51| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

ダウアログボックスを表示 (dialog)

 HSPのdialogは様々なダイアログを表示できる命令である。具体的には3つのモードがある。

(1) [OK]ボタン、[はい][いいえ]ボタンのダイアログ

 まずはダイアログに[OK]ボタンが表示されるもの。違いはアイコンマークが普通用と警告用の違いである。

dialog "メッセージ文字列",0,"タイトル名"
dialog "メッセージ文字列",1,"タイトル名"


 次に、ダイアログに[はい][いいえ]ボタンが表示されるもの。こちらも違いはアイコンマークが普通用と警告用の違いである。

dialog "メッセージ文字列",3,"タイトル名"
mes stat
dialog "メッセージ文字列",4,"タイトル名"
mes stat


 ただ、OKボタンと違って、これは[はい]・[いいえ]のどちらをユーザーが押したか知らなければならないため、これはstatというHSPのシステム変数を確認すればよい。6と時は[はい]、7の時は[いいえ]である。


(2)ファイル読み込み、保存のダイアログ
 よくプログラムにあるユーザーがファイルを指定する読み込みダイアログと保存ダイアログを表示する。ここでもシステム変数のstatを見ると正常に選択された場合は1が返ってくる。逆に0なら選択のキャンセルを意味する。

dialog "bmp",16,"拡張子の説明"
mes stat
mes refstr
dialog "bmp",17,"拡張子の説明"
mes stat
mes refstr


またシステム変数のrefstrには、実際にユーザーが選択したファイルのフルパスが返ってくる。上はBMPファイル(.bmp)の拡張子を持ったファイルを選択できる。

 ちなみに複数の拡張子から選択したいなら、下のように拡張子を付け足す。
dialog "bmp;*.jpg;*.gif",16,"拡張子の説明"
mes stat
mes refstr



(3)色選択ダイアログ
 任意のカラーを選択できるウィンドウが開く。タイプが2つあるが、「色の作成」という領域を最初に表示しておくか隠しておくかの違いになる。
 HSPシステム変数の「ginfo_r」「ginfo_g」「ginfo_b」に選択されたRGB値が格納される。

button "カラー",*select
stop

*select
dialog "",32
color ginfo_r,ginfo_g,ginfo_b

mes "選択した色で文字を表示する
タグ:HSP
posted by hsp-seed at 00:00| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

HSPで計算する2

 HSPで計算します。その2です。

 ビットシフトの1つ「ソフト演算子」です。左ビットシフト(<<)、右ビットシフト(>>)があり、if命令の比較演算と違って「<」「>」を2つ記述する。

 1ビット左にずらすと2倍になる。普通の掛け算(*)処理より高速。
mes 10<<1
mes 100<<1


 1ビット右にずらす1/2倍になる。普通の割り算(/)処理より高速。
mes 10>>1
mes 100>>1


 変数への代入処理。「a=a<<1」「b=b>>1」に等しい。
a = 100
a<<=1
mes a

b = 100
b>>=1
mes b

タグ:HSP
posted by hsp-seed at 00:00| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする