イントロダクション
HSP3.1は、HSP3.0に替わる新しいバージョンです。
しかしながら、HSP2からHSP3にあったような大幅な仕様の変更はなく、
あくまでも上位互換として動作する形で、各種機能が追加されています。
ここでは、HSP3.0とHSP3.1の違いについて。
そして、HSP2.61とHSP3全般の違いについて解説していきます。
HSP3.0との違いについて
HSP3.0をすでに使っているユーザーは、特に意識することなくHSP3.1をお使いいただけるはずです。
HSP3.1では、それまでの機能を継承しながら、新たな要素を多数追加しています。
HSP3.0で動作していたスクリプトは、ほとんどの場合、修正することなくHSP3.1で動作させることができます。
HSP3.1で修正が必要な項目は以下の通りです。
HSP3.1では、モジュール変数再設定のための命令、#setmodが削除されています。
この命令を使用しているスクリプトでは、修正が必要です。
お手数ですが、#setmodの代替となるモジュール変数設定のための
ユーザー定義命令を作成するようお願い致します。
HSP3.1では、モジュール変数削除のための命令、#delmodのパラメーターが
削除されています。#delmod命令で、パラメーターを指定しているスクリプトでは、
修正が必要です。お手数ですが、モジュール変数に通知するためのユーザー定義
命令を作成するようお願い致します。
これ以外の項目で、バージョンアップにあたりスクリプトを修正する必要はありません。
HSP3.1で追加変更された主要な項目は以下の通りです。
ヘルプ表示をhtmlレンダリングによる表示へ切り替えました
プリプロセッサ出力ファイル(hsptmp.i)を標準で生成しなくなりました
実数の表現として指数部のある形式を認識するようになりました
#constプリプロセッサ命令が実数演算に対応しました
ラベル型変数の機能を追加しました
標準のアイコンを256色のものに変更しました
かんたん入力(AHT)機能を追加しました
HSPスクリプトエディタのアドオン機能、SDKを追加しました
スクリプト自動生成ツール、「Peasエディタ」を追加しました
ブラウザ上での実行を支援するHSPLet機能を追加しました
HSPTVブラウザ上での実行テスト機能を追加しました
新規プラグインhspcv.dll、hspogg.dllの追加しました
プラグインhsp3imp.dllのマニュアルを追加しました
プラグインhgimg3、hspext、hspda、hspinetの修正・機能追加をしました
ユーザー作成プラグインEasy3D、hspdxfixを追加しました
ユーザー作成モジュールd3moduleを追加しました
HSP2との違いについて
HSP3は、HSP2までの仕様とプログラムを大幅に見直し、再構築したHSP3の最新バージョンです。
ver2.61までに培われた親しみやすさ、習得のしやすさ、シンプルさといった資産を継承しながら、
より幅広い応用と汎用性を持たせた環境を提供すべく開発されています。
以前のバージョンからの移行も含めて入門者から上級者まで幅広く使っていけるスクリプト言語となる
ことを願っています。
HSP3は、まったく新しく設計されたコアシステムを中心に構成されています。
このコアシステムは、プラットフォームに依存しないスクリプトエンジンと、自由に機能拡張を可能とするアーキテクチャを持っています。
シンプルで強力なコアシステムのもとで、各種プラットフォームに対応した拡張コンポーネントを
用意し、安定した可搬性と生産性を実現するシステムを目指しています。
いままでの書式やルールの特長は継承し、不要な仕様を見直すことで豊富な資料や過去の資産を有効に活用することができ、次期バージョンへ移行するための敷居も低くなっています。
HSP3は、ver2.61までの書式やルールを継承していますが、完全な互換性はありません。
HSP3を新規にインストールした場合でも、HSP2.xは削除されず独立した形で使用することができます。
ver2.61までのソーススクリプトをver3.0に移行させるためには、注意点を参照した上で互換性のない部分を変更するようにしてください。
また、ver3.0が正式にリリースされた後も、ver2.xの配布及びメンテナンスはしばらくの間継続される予定です。
既存のすべてのユーザーに、無理なくver3.0への移行ができるよう努力をしていきたいと考えています。
HSP3の概要
HSP2を利用してきたユーザー向けに、HSP3.1の概要を紹介します。
- 動作環境
HSP3のコアシステムは、WIN32上で動作します。
HSP2.xは、Windows95以降のバージョンをサポートしていましたが、
HSP3では、Windows98以降を動作環境としています。
(ただし、Windows95+InternetExplorer4以降の環境では動作可能です。)
- 命令の追加
HSP2.xではプラグイン命令だった画像関連の命令が標準で装備されています。
画像の拡大や回転を行なうgrotate、grect、gsquare命令や、
円を描画するcircle命令、HSVによる色指定を行なうhsvcolor命令など
多くの機能がサポートされています。
- 関数
式の中に関数を含めることができるようになっています。
これにより、一部の命令やシステム変数が関数に置き換えられています。
- 実数のサポート
64bit浮動小数による実数計算をサポートしています。
三角関数や平方根などの数学関数を装備しており、
精度の高い計算を行なうことができます。
- プラグイン
拡張プラグインについては、3.0から大きく仕様が拡張されています。
3.0専用にプラグインを作成することにより、型の拡張や描画システム、
イベントの管理など、大幅なシステムの拡張を可能にします。
HSP2.61までのプラグインは、互換機能によりほぼすべてをそのまま使用することができます。
また、HSP2.61で標準添付されていた拡張プラグインはすべて同名のものを同梱しています。
HSP3.0では、これに加えてHTTPやFTPのネットワークアクセスに特化したHSPINETや、
高度な3D処理をサポートするHGIMG3を同梱しています。
HSP3.1では、さらに高度な画像処理に特化したプラグインHSPCVや、3Dゲーム作成で
評価の高いEasy3Dや、d3moduleが同梱されています。
- モジュール
モジュール機能はスクリプトの名前空間や、変数の領域を独立させることで、
スクリプトの再利用性とメンテナンス性を高めることができます。
モジュール機能は、ユーザー定義命令の作成や、モジュール変数の作成、
ローカル変数の定義などにも結び付いた高度な仕組みです。
- ラベル型変数のサポート
ラベル型変数は、スクリプトの任意の位置情報を変数に格納するための仕組みです。
ラベル情報を変数に格納することにより、スクリプトの可能性がさらに広がります。
- HSPLet
HSPLetは、HSPの実行をJavaランタイム上で行なうためのシステムで、
これによりWebブラウザでの実行及び、Windows以外のシステムで HSP3のスクリプトを
動作させることが可能になります。
- DLL呼び出し
WIN32APIなど外部DLLを手軽に定義して呼び出すことが可能です。
HSP2.61のloadlib関連命令及びllmodに含まれる命令は、HSP3でサポートされません。
- COM呼び出し
WindowsのCOMコンポーネント呼び出しをサポートしています。
COMオートメーション、COMイベントなどの高度な技術を手軽に利用することができます。
これにより、IEコンポーネント、XMLパーサー、正規表現による検索や置き換え、RSSの取得などの
最新テクノロジーをスクリプトから簡単に呼び出せます。
- スクリプトエディタ
新規のスクリプトエディタを同梱しています。
編集サイズ制限の撤廃と、キーワードの色付け、タブの採用などにより
高機能なものとなっています。(以前のバージョンもHSED3LE.EXEとして同梱されています。)
スクリプトエディタから呼び出される周辺ツール(ヘルプブラウザ等)も、
バージョンアップしたものを同梱しています。
- peasエディタ
peasエディタは、テンプレート(ひな型)のパーツと、パラメーターやオプションを決めるだけで、
自動的にスクリプトを生成する簡易プログラミング環境を提供します。
ユーザーは、今まで通りにエディタでスクリプトを書くことはもちろん、マウス操作だけで
プログラムを作成することが可能になります。
- HSPTVブラウザ
HSPTVブラウザが標準で同梱されています。
これは、ネットワークを介してアップデートされるコンテンツビューアーです。
オンライン上のHSP情報、最新ソフトウェアを手軽に ダウンロードして楽しむことができます。
HSP3は難しい?
いままでHSP2を利用してきたユーザーの中には、HSP3になって新しい要素が大幅に
導入されたため、難しくなったと考えている方も多いと思います。
HSP3は、HSP2を使ってきたユーザーすべてに移行して使ってもらえるよう、設計されています。
HSP3で、大きく変わった点として関数の導入がありますが、これはいままで命令だったものを
計算式の中に記述できるようにしたもので、機能が変更されているわけではありません。
それ以外に追加された多くの機能は、HSPを拡張するための仕組みで、モジュール機能や
外部API呼び出し(loadlib関連命令にあたるもの)など、一般ユーザーが手軽に新しい機能を
使うことができるようにしたものです。
HSP3では、より柔軟な書き方ができるようになりましたが、人それぞれのスタイルが
あるものなので、HSP2と同じ書き方でも構いませんし、必要のない機能は使う必要はありません。
もし、HSP2に慣れている場合は、スクリプトの先頭に
「#include "hsp261cmp.as"」を1行追加してください。
主要な命令のほとんどがHSP2と同じ書き方で実行できるようになります。
ver2.xからのスクリプト移行
ここでは、既にver2.xを使用していた方、スクリプトを移行したい方に向けての変更点および注意点をお知らせします。
- 計算順序の変更
HSP3では、計算式で演算子ごとの優先順位が付けられています。
多くの言語と同様に、「+」「-」よりも「*」「/」の方が先に計算されるようになっています。
これにより、ver2.xまでの計算式(左から処理)と結果が変わってくる場合があります。
優先順位の詳細については、「言語仕様ガイド」を参照してください。
- 命令の関数化
一部の命令が関数として実装されています。
このため、ver2.xで使用していた命令の一部がそのままでは使用できなくなっています。
関数化された主な命令は、以下の通りです。
int、str、rnd、strlen、peek、wpeek、instr、strmid、getpath、ginfo、sysinfo
たとえば、「rnd a,10」は「a=rnd(10)」という書式になります。
- 命令及びシステム変数の変更
HSP 2.xに存在した以下のキーワードは3.0で変更されています。
ほとんどは代替の命令により同等の動作が可能になります。
また、2.xと互換で動作するマクロ(hsp261cmp.as)を利用することで
ある程度の互換を持たせることができるようになります。
■命令
rnd → rnd()という書式の関数になりました
gettime → gettime()という書式の関数になりました
peek → peek()という書式の関数になりました
wpeek → wpeek()という書式の関数になりました
notemax → notemaxというシステム変数(マクロ)になりました
strlen → strlen()という書式の関数になりました
sysinfo → sysinfo()という書式の関数になりました
getpath → getpath()という書式の関数になりました
strmid → strmid()という書式の関数になりました
instr → instr()という書式の関数になりました
ginfo → ginfo()という書式の関数になりました
sndload → mmload命令という名称に変更されました
snd → mmplay命令という名称に変更されました
sndoff → mmstop命令という名称に変更されました
skiperr → onerror命令による割り込みをお使いください
objsend → 代替としてsendmsg命令が用意されています
palfade → 代替命令は用意されていません
palcopy → 代替命令は用意されていません
getpal → palcolorと同機能になります
text → "hsp3util.as"モジュールにてtext,emes命令を提供しています
■システム変数
csrx → ginfo_cxマクロに名称変更
csry → ginfo_cyマクロに名称変更
paluse → ginfo_paluseマクロに名称変更
dispx → ginfo_dispxマクロに名称変更
dispy → ginfo_dispyマクロに名称変更
rval → ginfo_rマクロに名称変更
gval → ginfo_gマクロに名称変更
bval → ginfo_bマクロに名称変更
winx → ginfo_winxマクロに名称変更
winy → ginfo_winyマクロに名称変更
cmdline → dir_cmdlineマクロに名称変更
windir → dir_winマクロに名称変更
curdir → dir_curマクロに名称変更
exedir → dir_exeマクロに名称変更
sysdir → dir_sysマクロに名称変更
prmx → ginfo命令の仕様変更により必要なくなりました
prmy → ginfo命令の仕様変更により必要なくなりました
■loadlib関連命令
loadlib関連命令は、#uselib、#funcを利用したDLL呼び出しか、または
callfunc関数による外部呼び出しに引き継がれます。
以下の命令は、HSP3ではサポートされていません。
(ll_poke、ll_peek等は、「dupptr命令+poke/peek命令」で代替が可能です。)
ll_ret
ll_retset
ll_getptr
ll_peek
ll_peek1
ll_peek2
ll_peek4
ll_poke
ll_callfunc
ll_n
ll_poke1
ll_poke2
ll_poke4
ll_libfree
ll_callfnv
ll_call
ll_free
ll_s
ll_p
ll_str
ll_dll
ll_func
ll_type
ll_z
ll_libload
ll_getproc
ll_bin
■llmod関連命令
llmodに含まれる命令、マクロ等は継承されません。
同等の動作を行なうモジュールが「S Software」のページにて公開されています。
http://s-software.sakura.ne.jp/
- モジュール機能の仕様変更
モジュール機能の仕様が変更されています。
数値以外のパラメーターをユーザー定義命令に渡す場合には、スクリプトを変更する必要があります。
また、mref命令についても一部機能変更がありますので注意してください。
詳細については、「言語仕様ガイド」を参照してください。
- プラグイン仕様の変更
HSP2.5以降のすぺてのプラグイン規約に対応していますが、
HSP3の内部仕様変更による制限がいくつかあるので、注意が必要です。
・BMSCR構造体は、flagからcolorまでのフィールドのみ参照できます。
・PVal構造体のflagフィールド(型タイプ値)やlenフィールド(配列情報)を
DLL側で書き換えることはできません。
・PVal構造体から文字列型の配列変数にアクセスすることはできません。
これ以外の点においては、HSP ver2.61と同等の情報が受け渡されます。
HSP2.61互換のプラグインでは、以下のような制限が発生しますので注意してください。
また、プラグインの互換機能はすべてのHSP2.xプラグインの動作を保障するものではありません。
・プラグインから変数に値を代入する場合、バッファの自動拡張は行なわれません。
(バッファオーバーフローが発生しないように注意してください)
フルセットのアーカイブには、ver2.61同梱プラグインのうち、hspda、hspdb、hspdx、
hspext、hspsock、hgimg(x)及びヘッダファイルが含まれています。
これらのプラグインは、ver2.61に同梱されているものとまったく同一のDLL
ファイルで、3.0のプラグイン互換機能により動作しています。
(HSP同梱でないユーザー作成プラグインの互換性については、それぞれの仕様により異なります。)
hspdx.dllについては、HSP3.0のpicload仕様変更によりパレットモード時に
読み込んだ画像のパレットが反映されません。このため、画像ファイルから
パレットデータを取り出すためのbmppalette命令を定義したモジュール集、
「hsp3util.as」を提供しています。使用例については、hspdxのサンプル
スクリプトを参照してください。
- 配列についての変更
ver3.0からは配列変数の扱いが大きく変更されています。
ver2.xではdimまたはsdim命令によって、配列の最大数を確保してから使用する形になっていましたが、ver3.0では配列の確保をすることなく配列変数に代入することが可能になっています。(ただし、代入されていない配列の内容を参照するとエラーになります)
ver2.xではデフォルトで0〜15までの配列(数値型変数の場合)を利用可能でしたが、ver3.0ではデフォルトの確保はありません。(0のみ)
この違いによって一部のスクリプトが配列の参照中にエラーとなる場合があります。
- メモリバッファについての変更
HSP3から文字列型の変数は、自動拡張により自由なサイズのデータが扱われることになります。
このため、文字列型の配列変数を作成した場合には可変長の変数バッファが複数作成されることになり、ver2.xまでのような連続したメモリ空間での管理ではなくなります。
これにより、文字列型の配列変数に対してbsave、bloadなどを始めとした直接メモリを操作する命令を実行した場合、ver2.xではすべての次元にアクセスできましたが、
ver3.0からは特定の配列要素単位でのアクセスとなります。
実際にそのような操作を行なっているスクリプトは多くないと思われますが、文字列型の配列変数に対するメモリ操作には注意が必要です。
- peek命令の変更
peek命令は、peek関数になりましたが同時にver2.xでサポートしていた文字列読み出しの機能は廃止されています。
同等の処理を行なう場合は、getstr命令で区切りキャラクターコードを0としてお使いください。
ver2.xとの互換マクロについて
スクリプトの先頭に以下の行を追加することで、ver2.61互換マクロが有効になります。
#include "hsp261cmp.as" ;ver2.61互換を有効にする
これは、commonフォルダに存在する「hsp261cmp.as」で定義されている
ver2.61互換マクロにより、3.0上で動作するよう適切な命令に変換するものです。
ただし、現状のver2.61互換マクロは、β版でありすべての記述をサポートして
いるわけではありません。また、計算式の優先順位変更も行なわれません。
完全ではないものの、ある程度までのスクリプトであれば、そのまま3.0で
動作させることが可能です。
ver2.61互換マクロの設定以降には、ver3.0専用の命令及び定義ファイルなどを
置かないように注意してください。