|
|
HSP-NEXT
|
|
|
|
|
|
|
▲ |
|
HSPは、ver2までの仕様からプログラムの大幅な見直しがされ、 HSP2.6系の培われた親し みやすさ、習得のしやすさ、シンプルさといった資産を継承しながら、より幅広い応用と 汎用性を持たせた環境を提供すべく開発されています。このため、以前のバージョンから の移行において、 ver2.61までの書式やルールを継承していますが、完全な互換性はあり ません。 ここでは、従来のver2.61までのソーススクリプトをver3.0に移行させるための 主な変更点や注意点を取り上げて見ました。移行する場合の参考として下さい。 (1)変更点の概要 HSP3では、ほとんどすべての命令やストレージを入れ替えることが可能なシステムになっ ています。これは、将来的な拡張の要求に耐えられるようにしているのと、従来の機能や 資産を生かしながら拡張したものです。また、今後のバージョンアップや整理の段階で、 不要なオプションやモードなどは統合される予定となっています。 ■動作環境 HSP3のコアシステムは、WIN32上で動作します。HSP2.xは、Windows95以降のバージョン をサポートしていましたが、 HSP3では、Windows98以降を動作環境としています。 (ただし、Windows95+InternetExplorer4以降の環境では動作可能ですが、クライアント 環境の相違による制約等のため、動作保証していません。) ■命令の追加 HSP2.xではプラグイン命令だった画像関連の命令が標準で装備されています。画像の 拡大や回転を行なう grotate、grect、gsquare命令や、 円を描画するcircle命令、 HSVによる色指定を行なう hsvcolor命令など 多くの機能がサポートされています。 ■関数のサポート 関数がサポートされています。式の中に関数を含めることができるようになり、これ により、一部の命令やシステム変数が関数に置き換えられています。 ■実数のサポート 64bit浮動小数による実数計算をサポートしています。 三角関数や平方根などの数学 関数を装備しており、 精度の高い計算を行なうことができます。 ■プラグイン 拡張プラグインについては、3.0から仕様が大幅に拡張されています。 拡張仕様に基 づいてHSP3専用のプラグインを作成すれば、型の拡張や描画システム、イベントの管理 など、大幅なシステムの拡張を可能にします。 また、従来の資産の継承をすべき、HSP2.61までのプラグインは、互換機能によりほぼ、 すべてをそのまま使用することができます。 ■DLL呼び出し プリプロセッサの大幅な拡張により、 WIN32APIなど外部DLLを手軽に定義して呼び出 すことが可能です。 ■COM呼び出し WindowsのCOMコンポーネント呼び出しをサポートしています。 COMオートメーション 、COMイベントなどの高度な技術を手軽に利用することができます。 これにより、IE コンポーネント、XMLパーサー、正規表現による検索や置き換え、RSSの取得などの最 新テクノロジーをスクリプトから簡単に呼び出せます。 ■モジュール モジュール機能は上位互換で新しい記述方法をサポートしています。モジュールごと に変数名やラベル名などを分離するだけでなく、モジュール固有の変数領域を持つ変数 (モジュール型変数)を作成することが可能になっています。また、ユーザー定義命令 のパラメーター受け渡し方法も刷新されています。 ■メッセージイベントの取得 スクリプトベースでメッセージイベントの取得が可能となっています。これにより更 に高度で柔軟な処理ができるようになります。 ■その他 スクリプトエディタは、編集サイズ制限の撤廃と、キーワードの色付け、タブの採用 などによる高機能なものにバージョンアップしたものを同梱しています。また、これ に付随して、エディタから起動される周辺ツール類も機能向上しています。 その他、サンプルビューワーやHSPTVブラウザといった関連ツールも同梱しています。 (2)HSP ver2.xからのスクリプト移行 軽微な変更や改造を行うために全てをHSP3に移行して書き換えることは、お勧めではあり ません。ここでは、大幅な仕様変更や機能向上を目的とした場合の従来資産の継承という 観点での移行について、説明致します。 ■計算順序の変更 HSP ver2.xまでは計算式(左から処理)となっていましたが、HSP3では、計算式で演算子 ごとの優先順位が付けられています。多くの言語と同様に、「+」「-」よりも「*」 「/」の方が先に計算されるようになっています。 これにより、従来とは計算結果が 変わってくる場合があります。 ■命令の関数化 一部の命令が関数として実装されています。このため、ver2.xで使用していた命令の 一部がそのままでは使用できなくなっています。関数化された主な命令は、以下の通 りです。
・HSP3になって関数化された主な命令一覧
------------------------------------------------------------
int : ラメーターを整数値に変換
str : ラメーターを文字列に変換
rnd : 乱数を発生
gettime : 時間・日付を取得する
strlen : 文字列の長さを調べる
peek : バッファから1byte読み出し
wpeek : バッファから2byte読み出し
lpeek : バッファから4byte読み出し
instr : 文字列の検索をする
strmid : 文字列の一部を取り出す
getpath : パスの一部を取得
ginfo : ウィンドウ情報の取得
sysinfo : システム情報の取得
(例) rnd a,10 → a=rnd(10) となります。
・HSP3で新規に追加された関数一覧
------------------------------------------------------------
length : 変数の持つ配列要素数を返す(1次元)
length2 : 変数の持つ配列要素数を返す(2次元)
length3 : 変数の持つ配列要素数を返す(3次元)
length4 : 変数の持つ配列要素数を返す(4次元)
vartype : 変数の型を返す
varptr : 変数のデータを示すアドレスを返す
varuse : 変数の使用状況を返す
dirinfo : 特定のディレクトリ情報を返す
lpeek : バッファから値を取り出す
double : パラメーターを実数に変換する
sin : サイン値を返す(パラメーター単位はラジアン)
cos : コサイン値を返す(パラメーター単位はラジアン)
tan : タンジェント値を返す(パラメーター単位はラジアン)
atan : アークタンジェント値を返す
sqrt : ルート(平方根)値を返す
logf : 対数値を返す
expf : 指数値を返す
abs : 整数の絶対値を返す
absf : 実数の絶対値を返す
limit : 整数値を範囲内に収める
limitf : 実数値を範囲内に収める
objinfo : ウィンドウオブジェクトに関する情報を取得します
■命令およびシステム変数の変更
HSP 2.xに存在した以下のキーワードは3.0で変更されています。関数化されたものは、 上記の命令の関数化の項を参照して下さい。命令名が別のものに変更されたものや廃止 もしくは未サポートのものは、以下の通りです。尚、システム変数については関数化に伴い、 従来との互換性を維持するためにマクロとして、同等の動作が可能になります。 HSP Ver2.61互換マクロ(hsp261cmp.as)利用して下さい。
sndload : mmload命令という名称に変更
snd : mmplay命令という名称に変更
sndoff : mmstop命令という名称に変更
skiperr : 廃止 → onerror命令による割り込みにて代用
objsend : 廃止 → sendmsg命令にて汎用的な利用が可能
palfade : 廃止 → palfade代替マクロを作成して対応(下記参照)
palcopy : 廃止 → モジュール(hsp3util.as)のbmppalette命令で代用
getpal : 廃止 → palcolorと同機能になります
text : 廃止 → モジュール(hsp3util.as)にて等価命令を提供(text,emes命令)
・palfade代替マクロ
#include "hsp3util.as"
#define global palfade palcolor : palette,ginfo(16),ginfo(17),ginfo(18),1
ラベル : HSP Ver2.61までは、ラベルの先頭にラベルを識別する * の省略が許さ
れていましたが、HSP3では省略できません。省略されたラベルに * を付けて下さい。
システム変数およびマクロ化されたものは、下記の一覧表を参照して下さい。
■システム変数の変更
loadlib関連命令は、#uselib、#funcを利用したDLL呼び出しか、またはcallfunc関数 による外部呼び出しに引き継がれます。 ll_poke、ll_peek等は、「dupptr命令+poke/peek命令」で代替が可能です。 その他のll_xxxx命令は、HSP3ではサポートされていません。 移植において必要とされる場合は、代替と なる機能を作成して下さい。 ll_libload、ll_callfunc、ll_getproc、ll_libfree、ll_poke、ll_peek に相当する代替モジュールの サンプルを参考として紹介します。
・loadlib代替モジュールの命令一覧
----------------------------------------------------------------------------
vpeek : ポインタを使った読み込み (ll_peek 相当)
vpeek1 : ポインタを使った1バイトの読み込み (ll_peek1 相当)
vpeek2 : ポインタを使った2バイトの読み込み (ll_peek2 相当)
vpeek4 : ポインタを使った4バイトの読み込み (ll_peek4 相当)
vpoke : ポインタを使った書き込み (ll_poke 相当)
vpoke1 : ポインタを使った1バイトの書き込み (ll_poke1 相当)
vpoke2 : ポインタを使った2バイトの書き込み (ll_poke2 相当)
vpoke4 : ポインタを使った4バイトの書き込み (ll_poke4 相当)
dllload : 外部dllのリンク (dllを読込みハンドルを取得) (ll_libload 相当)
funcprocadr : 外部dllの関数アドレスの取得 (ll_getproc 相当)
funcproc : 外部dllの関数実行 (ll_callfunc相当)
dllfree : リンクした外部dllの開放 (ll_libfree 相当)
;***** loadlib代替モジュールサンプル (exloadlib.as) *****
#ifdef __hsp30__
#ifndef __EXLOADLB__
#define __EXLOADLB__
#uselib "kernel32.dll"
#cfunc global LoadLibrary "LoadLibraryA" sptr
#cfunc global GetProcAddress "GetProcAddress" int,sptr
#func global FreeLibrary "FreeLibrary" int
#cfunc global lstrlen "lstrlen" int
#module
;▼ポインタを使った読み込み
#deffunc vpeek var prm1,var prm2,int prm3
lb=lstrlen(prm2)
if prm3==0 {
dupptr _clone,prm2,lb,vartype(prm2)
memcpy prm1,_clone,lb
}else{
dupptr _clone,prm2,prm3,vartype(prm2)
memcpy prm1,_clone,prm3
}
return
;▼ポインタを使った1バイトの読み込み
#deffunc vpeek1 var prm1,var prm2
dupptr _clone,prm2,1 : prm1=peek(_clone,0)
return
;▼ポインタを使った2バイトの読み込み
#deffunc vpeek2 var prm1,var prm2
dupptr _clone,prm2,2 : prm1=wpeek(_clone,0)
return
;▼ポインタを使った4バイトの読み込み
#deffunc vpeek4 var prm1,var prm2
dupptr _clone,prm2,4 : prm1=lpeek(_clone,0)
return
;▼ポインタを使った書き込み
#deffunc vpoke var prm1,var prm2,int prm3
lstrlen prm2 : lb=stat
dupptr _clone,prm2,lb : memcpy _clone,prm1,prm3
return
;▼ポインタを使った1バイトの書き込み
#deffunc vpoke1 var prm1,var prm2
dupptr _clone,prm2,1 : poke _clone,0,prm1
return
;▼ポインタを使った2バイトの書き込み
#deffunc vpoke2 var prm1,var prm2
dupptr _clone,prm2,2 : wpoke _clone,0,prm1
return
;▼ポインタを使った4バイトの書き込み
#deffunc vpoke4 var prm1,var prm2
dupptr _clone,prm2,4 : lpoke _clone,0,prm1
return
;▼外部dllのリンク (dllを読込みハンドルを取得)
; prm1 : 外部dll名文字列 or 文字列型変数
; 戻り値 stat=dllのハンドル, stat=-1 : 失敗
#deffunc dllload str prm1
pdll=LoadLibrary(prm1)
if pdll==0 : return -1
return pdll
;▼外部dllの関数アドレスの取得
; prm1 : 読み込み先の変数 (関数アドレス)
; prm2 : dllのハンドル
; prm3 : 関数名文字列 or 文字列型変数
#deffunc funcprocadr var prm1,int prm2,str prm3
funcptr=GetProcAddress(prm2,prm3)
if funcptr==0 : return -1
prm1=funcptr
return 0
;▼外部dllの関数実行
; prm1 : 読み込み先の変数 (戻り値)
; prm2 : パラメータ数値型配列変数
; prm3 : 関数アドレス
; prm4 : パラメータの数
#deffunc funcproc var prm1,array prm2,int prm3,int prm4
prm1=callfunc (prm2,prm3,prm4)
return 0
;▼リンクした外部dllの開放
; prm1 : dllのハンドル
#deffunc dllfree int prm1
FreeLibrary prm1
return
#global
#endif
#endif
;***** 動的ローディングによる記述例 *****
; (このままでは動作しませんので、実際のdll名や関数名を指定して下さい。)
#include "exloadlib"
;▼xxxx.dllを動的ローディング
dllload "xxxx.dll" : pdll=stat
;▼xxxx.dllにある関数アドレスを取得
funcprocadr _Getfunc1,pdll,"Getfunc1"
funcprocadr _Getfunc2,pdll,"Getfunc2"
・
・ (関数が複数ある場合は、それぞれの関数毎にアドレスを取得)
・
;▼関数パラメータを指定
prm=varptr(filename),0,-1
;▼関数実行
funcproc dllret,prm,_Getfunc1,3
他の処理
;▼dllの解放
dllfree pdll
stop
■llmod関連命令
llmodに含まれる命令、マクロ等は継承されません。下記のサイトでllmodをHSP3に移植した、llmod3が公開されています。
サイト名 : S Software
URL : http://www.s-software.net/
・モジュール機能の仕様変更
モジュール機能の仕様が変更されています。数値以外のパラメーターをユーザー定義命令に渡す場合 には、スクリプトを変更する必要があります。また、mref命令についても、一部機能変更があります ので注意してください。 ■プラグイン仕様の変更 HSP2.5以降のすぺてのプラグイン規約に対応していますが、HSP3の内部仕様変更による制限が いくつかあるので、注意が必要です。プラグインの互換機能でHSP2.xプラグインは動作しますが、 すべてのHSP2.xプラグインの動作を保障するものではありません。 以下のような制約や注意点があります。 ・BMSCR構造体は、flagからcolorまでのフィールドのみ参照できます。 ・PVal構造体の flagフィールド(型タイプ値)やlenフィールド(配列情報)をDLL側で書き換えることはできません。 ・PVal構造体から文字列型の配列変数にアクセスすることはできません。 ・プラグインから変数に値を代入する場合、バッファの自動拡張は行なわれません。 ・HSP同梱でないユーザー作成プラグインの互換性については、それぞれの仕様により異なります。 ■配列についての変更 HSP ver3.0からは配列変数の扱いが大きく変更されています。 ver2.xではdimまたは sdim命令によって、配列の最大数を確保してから使用する形になっていましたが、 HSP3では配列の確保をすることなく配列変数に代入することが可能になっています。 (ただし、代入されていない配列の内容を参照するとエラーになります) HSP ver2.xではデフォルトで0〜15までの配列(数値型変数の場合)を利用可能でしたが、 ver3.0ではデフォルトの確保はありません。(0のみ) この違いによって一部のスクリプトが 配列の参照中にエラーとなる場合があります。 ■メモリバッファについての変更 HSP3から文字列型の変数は、自動拡張により自由なサイズのデータが扱われることになります。 このため、文字列型の配列変数を作成した場合には可変長の変数バッファが複数作成されること になり、ver2.xまでのような連続したメモリ空間での管理ではなくなります。 |
|
|
▲ |
|
ソーススクリプトの状態でのデバッグが終わってソーススクリプトを実行ファイルにしま すが、出来あがった実行ファイルのアイコンは、 HSPのランタイムがリソースとして持っ ているホットスープのカップアイコンとなります。このアイコンを好みのアイコンに書換 えるには、実行ファイルの内部を直接操作する必要があります。内部の暗号化等の関係で 通常のアイコン書換えツールでは、うまく書換えすることができません。リソースを編集 できるツールが必要となります。これを可能にするツールとしては、フリーで著名なリソ ースハッカーがあります。このツール単体でも書換えが可能ですが、操作手順がやや難し かったり、ちょっとした書換えのためのノウハウが必要だったりします。これから紹介す るのは、HSPで開発されたリソースハッカーを利用したアイコン書換えツールです。 操作 が非常に簡単であり、アイコンの種類 (サイズ違いや色数違いを含むマルチアイコンなど) に特に制限なく対応しています。また、実行ファイルにバージョン情報を付加する機能も あり、お勧めです。 アイコンを書き換える処理にフリーの リソースエディタ Resource Hacker を利用してい ます。公式サイトより 日本語翻訳版 (Japanese) を別途入手するようにして下さい。 まず、下記の公式サイトよりダウロードしたら、 Resource Hackerを任意のディレクトリ に解凍してインストールして下さい。インストールが完了したら、続いて、Let's HSPIC! を任意のディレクトリに解凍して下さい。Let's HSPIC!を起動して、先程インストールし た Resource Hackerの本体である「ResHacker.exe」 を選択し、初回起動時の設定は終了し ます。 手順は、Let's HSPIC!のreadme.txtに記載されている部分からの抜粋となりますが 、下記のようなステップで書換えを実行します。 その他、注意事項やオプション機能につきましては、Let's HSPIC!添付のreadme.txtを参 照願います。
(1)HSP製実行ファイル (*.exe/*.scr) と アイコンファイル (*.ico) を選択
します。[...]ボタンでファイルを選択するか、ウィンドウ上にファイルを
D&Dしてください。
(2)[Change!]ボタンを押すと、書き換え作業が行われます。実行ファイルの
サイズがかなり大きい場合は、若干時間を要するかもしれません。
▼作者:Kpan氏 Let's HSPIC!
●ダウンロードURL : http://lhsp.s206.xrea.com/
▼作者:Angus Johnson氏 Resource Hacker
日本語版 Translation by : Yoshiroh Maruoka Japanese : (Ver 3.4.0)
●ダウンロードURL : http://www.users.on.net/johnson/resourcehacker/
拡張やバグ対応がなされていますので、できるだけ最新バージョンを入手して下さい。
|
|
|
▲ |
|
実行ファイルなどのバイナリ形式のものをできるだけファイルサイズを小さくして実行可 能としたいという要求があります。このようなことを実現する著名なツールとして、 UPX (the Ultimate Packer for eXecutables)があり、 Delphi等で作成された実行ファイルに は大抵、UPXで圧縮されていて、愛好者も非常に多いソフトです。これをHSPの実行ファイ ルに適用させたものとして、Let's HSPUPX!があります。HSPの実行ファイルを実行可能な まま圧縮すると、サイズは小さくなるのですが、 HSP内部の仕様により、そのまま圧縮し ても、実行できない無効なものとなってしまいます。 Let's HSPUPX!は、この問題を解決 したものであり、何の制限もなく実行可能ファイルとすることができます。 まず、下記の公式サイトよりダウロードしたら、 UPX Win32 console versionを任意のデ ィレクトリに解凍してインストールして下さい。 インストールが完了したら、UPXの本体 である upx.exe をHSP本体が置かれてあるフォルダにコピーして下さい。 続いて、 Let's HSPUPX!をupx.exeと同様にHSP本体が置かれてあるフォルダにコピーして 下さい。これで準備完了です。実行ファイルを直接圧縮する方式となっていますので、圧 縮するファイルは、予め、 HSPのスクリプトエディタで実行ファイルとして作成しておい て下さい。 Let's HSPUPX!を起動し、圧縮後のファイル名を指定します。そして、圧縮ボ タンをクリックして、終了のダイアログがでるまで待ちます。これだけの簡単操作でOKで す。その他、注意事項やオプション機能につきましては、Let's HSPUPX!添付のreadme.txt を参照願います。 ▼作者:Kpan氏 Let's HSPUPX! ●ダウンロードURL : http://lhsp.s206.xrea.com/ ▼作者:Markus F.X.J. Oberhumer & Laszlo Molnar氏 UPX Win32 console version ●ダウンロードURL : http://upx.sourceforge.net/ 拡張やバグ対応がなされていますので、できるだけ最新バージョンを入手して下さい。 |
|
|
▲ |
|
HSPは、自由なAPI呼び出し機能や、最新のCOMテクノロジーによるCOMコンポーネント呼び 出しをサポートしており、簡単にスクリプトベースでブラウザが作成できたりします。 HSPそのものをブラウザ上で動作させるには、 CGIを利用できますが、flashのようなアニ メーション風のものやゲーム等は難易度が高く動作できる環境も限定されます。 ここで紹介するのは、HSPを普通に作成して、オブジェクト(axファイル)にしたものを、 HSPLetコンパイラを使用してコンパイルして、ブラウザで実行できるようにするアプレッ トです。また、HSPLetは、Javaで作成されているので、Windows だけでなく多くのプラッ トフォームで実行することが可能となっています。内部は最適化されていて、クライアン トで動作するHSPで作成されたアプリケーションよりも高速に動作します。 HSPLetが提供 するHSPワールドを堪能して下さい。 HSPLet添付のreadme.txtからの抜粋ですが、基本的な使い方としては、次の通りです。 a. compiler.exe を起動 b. パックファイルに *.ax を追加(または既存の PACKFILE を選択) c. コンパイルボタンを押す d. *.html を表示する また、動作の前提条件として、JRE 1.4 がインストールされている環境で動作します。 ▼作者:山田 雄己(Yuki)氏 HSPLet3.0 ●ダウンロードURL : http://www.group-finity.com/ 拡張やバグ対応がなされていますので、できるだけ最新バージョンを入手して下さい。 |
|
|
▲ |
|
HSPには、pset やline、circleといったグラフィック命令が標準実装されていますが、3D の描画を行なうには、最新の描画技術を利用した hgimg.dllを利用して開発することにな ります。本格的な3D処理が堪能できますが、反面、DirectX や 3D アクセラレータに依存 します。 もっと手軽に簡単に3Dを楽しみたいという方にお勧めなのが、HSPの標準の描画 命令のみで作られたd3moduleです。d3moduleは、HSPのline、circleといったHSPの命令パ ラメータと同じように簡単な手続きをするだけで、高度な3D処理が可能となっています。 まず、下記の公式サイトよりd3moduleをダウロードして、適当な場所で解凍して下さい。 d3module本体であるd3module.hspは、HSPのcommonフォルダに入れておくと便利です。 利用するスクリプトの先頭に、 #include "d3module.hsp" と記述すれば、d3moduleが提供する各モジュール命令が利用できるようになります。詳細 は、d3module提供のヘルプ d3mhelp.hs に記載されていますので、参照して下さい。 サンプルやデモも豊富で命令の理解がし易いように配慮されています。 ▼作者:S.Programs(sprocket)氏 d3module ●ダウンロードURL : http://sprocket.babyblue.jp/ 拡張やバグ対応がなされていますので、できるだけ最新バージョンを入手して下さい。 |
| Copyright (C)HSP-NEXT sakura. 1998-2007 . All rights reserved. |