HSP : Hot Soup Processor ver2.6 / onion software 1997-2003(c)
HSP ver2.6の主な拡張点
HSP ver2.6は、ver2.55までのver2.xの資産をすべて継承した上で、より安全で
安定した環境を入門者から上級者まで幅広く提供すべく開発されています。
ver2.6で変更される主なポイントは以下の通りです。
-
安全なコード実行環境
文字列バッファのオーバーフローや、システム例外処理が発生する個所を
より安全にチェックすることで、安定したスクリプトの作成を行なうことができます。
バッファオーバーを防ぐための自動メモリ再確保など、さらに手軽で効率的な
アプリケーション作りを支援します。
また、モジュール機能の強化や、プリプロセッサの刷新によってスクリプトの
汎用性と利便性が向上します。入門者にとっての単純な記述はそのままに、
上級者までステップアップできるスケーラビリティを持っています。
-
使い勝手を向上させる新機能
HSPの原点に立ち返って、より手軽にアプリケーションを作成するための
新規命令やオプションが追加されています。プリプロセッサの導入と、マクロ
命令強化に伴うfor〜next、while〜wendなどの制御構造のサポート、
DLLを自在に呼び出すためのloadlib対応命令、エラートラップなど広い範囲への
応用が可能になります。
また、スクリプトエディタで編集中のソースを、ボタン1つで実行ファイルに
変換する「実行ファイル自動作成」などスクリプトの運用効率もアップしています。
-
既存命令の強化
標準の描画機能でも、色加算、色減算合成などの新機能を提供しています。
また、直感的でない制限や、不具合が修正されています。
MAG形式やグレースケールJPEGの読み込みを改善しているほか、グラフィック
バッファ間コピーの4の倍数サイズ制限、instr命令の全角制限など
ボトルネックとなる部分を撤廃しています。
-
進化した拡張機能
標準の拡張プラグインもアップデートを行ない多くの機能追加を行なっています。
3D機能を大幅に向上させたHGIMGプラグイン、大量の文字列検索機能を付加した
HSPDAプラグイン、ネットワークゲームのための制作支援を行なうためのHSP/O2など、
進化する周辺コミュニティやサポートツールを最大限に利用できます。
以前のバージョンが持つ手軽さや気軽なオペレーションはそのままに、
より高度な処理と完成度の高いアプリケーション開発にも対応できるよう
拡張されています。HSP ver2.55のオペレーションや、スクリプト仕様は
ほぼすべて上位互換で引き継がれています。
ver2.55ユーザーへのハイライト
ここでは、ver2.55から追加された機能、便利な情報などをまとめて紹介します。
何が変わったのか、どう便利なのかを具体的にポイントだけ説明しています。
詳しいことは、それぞれの命令リファレンスや、プログラムガイドをお読みください。
各種制限の撤廃
MAG形式やグレースケールJPEGの読み込みを改善しているほか、
gcopy命令で4の倍数サイズ制限、instr命令の全角制限などをなくしています。
バッファオーバーフローチェックの強化
変数が確保しているサイズより長い文字列をコピーした場合のチェックを強化しているほか、
バグにつながるような代入でエラーを出すように修正されています。
await命令の軽量化
いままでCPU負荷が高かったawait命令をデフォルトで負荷が軽くなるように修正しています。
loadlib、llmodの標準化(中上級者向け)
いままで外部DLLだったloadlib、llmod関連命令を本体命令として内蔵しました。
また、HSPEXT.DLLのsysinfo命令も標準命令に変更されています。
メモリバッファの自動確保
dirlist、noteadd、noteloadの命令が、代入されるサイズに合わせて自動的にメモリ確保を行なうようになりました。
プリプロセッサの強化(上級者向け)
#defineマクロが大幅に強化されたほか、#ifdef、#ifndefなどの生成コントロール、
定数定義を行なう#constなど多数の命令が追加されています。
コメント記述の追加
CやJavaと同様のコメント記述(「//」「/*」〜「*/」)が可能になっています。
自動フォーカス移動
「objmode 1,1」を指定するだけで、[TAB]キーによる自動フォーカス移動がサポートされます。
エラートラップの追加
onerror命令により、エラー発生時にジャンプさせることが可能になります。
標準マクロのサポート(中上級者向け)
標準マクロ定義ファイル(hspdef.as)により、do〜until、while〜wend、for〜next、switch〜case
などの構文がサポートされています。
半透明オペレーションの追加
gmode命令に色加算、色減算のモードが追加されています。特殊効果などに威力を発揮します。
実行ファイル自動作成
[ctrl]+[F9]を押すだけで実行ファイルが作成されます。
その際のオプションや、PACKFILEに含めるファイルをスクリプトに記述することも可能になりました。
on〜goto、on〜gosub命令
指定された値に応じて飛び先を選択するon命令が追加されました。
run命令の追加オプション
run命令にcmdlineの内容を指定するパラメーター追加されました。
メモリストリーム機能(中上級者向け)
ファイル名の替わりに「MEM:ファイル名」と指定すると、
変数メモリ上のデータをファイルとして取得する機能が追加されています。
メッセージ範囲の取得
ginfo命令により、mes、print命令により出力されたドットのサイズを取得することができます。
ファイルパス取り出し命令の新設
新規にgetpath命令を追加。ファイル名から拡張子だけを取り出すなどの便利な機能を持っています。
DPMファイルの明示機能
ファイルをパックしておくDPMファイルを複数選択して読み込むことが可能になっています。
拡張プラグインの新仕様追加(上級者向け)
自由なパラメータースタイルの拡張命令をサポートしています。
また、メモリ再確保やファイル読み込みなどの新機能もサポートしています。
※ver2.55との互換性について
ver2.6では、すべての命令をver2.55の上位互換として動作するように作られています。
過去のバージョンで作られたソーススクリプトも、ver2.6で実行させることが可能です。
ただし、ver2.6で追加された新機能や変更によりスクリプトの修正が必要な場合があります。
特に、新規のマクロ名(while,do,switch,case等…)と同じ名前を変数やラベルとして使用している
スクリプトはエラーが発生します。このような場合は、スクリプトエディタの「HSPメニュー」から、
「HSP拡張マクロを使用する」を選択してチェックを外してみてください。新規マクロが定義されなくなり、
HSP ver2.55互換で動作するようになります。
その他、互換性についての注意点は「ver2.6の変更点 」の項を参照してください。
アップデートガイド
以前のバージョンがすでにインストールされている場合は、上書きせずに、
違うディレクトリにインストールするか、以前のファイルをすべて削除してから
新しいバージョンをインストールしてください。
(前のバージョンのファイルと混在しないようになっていればOKです。
必ずしも以前のバージョンを削除する必要はありません。)
以前のバージョンからの変更点は、このマニュアルに履歴が記載されているほか、
プログラミングマニュアルの目次に、
[New]がついている項目は、解説が追加または変更されていることを示しています。
ver2.6の変更点
ver2.6は、以前のバージョン(2.55)に対して次のような拡張・修正を行なっています。
このバージョンは、なるべくver2.xの上位互換で動作するように作られていますが、
一部の機能で非互換になる可能性があります。
このアップデートによって、ver2.xで使用していたソーススクリプトが正常な動作しなくなる可能性は以下のものがあります。
-
新規に追加された命令/マクロの名前と、ユーザーがつけた変数の名前が重なるとエラーが発生します。
新規キーワードで名前の衝突が起こりやすいものとしては、loadlib関連命令(ll〜)、
for,next,while,wend,do,untilなどの新規マクロ、getpath,sysinfoなどの新規命令
があります。
これらのキーワードと同じ、変数名やラベル名があった場合には、別な名前に
置き換えることで正常に動作をさせることができます。
過去のスクリプトが、新規のマクロ名(while,do,switch,case等…)と衝突して動作しない場合には、
スクリプトエディタの「HSPメニュー」から、「HSP拡張マクロを使用する」のチェックを外してみて
ください。新規マクロが定義されなくなり、HSP ver2.55互換で動作するようになります。
-
変数のメモリ領域保護のチェックが厳しくなったために、以前のスクリプトで
問題が発覚しなかったものがエラーとなる場合があります。
文字列バッファのオーバーフローなどが発生する恐れがあるスクリプトは、
ver2.6ではより多くの領域を確保するなどの修正を行なう必要があります。
また、dirlistやメモリノートパッド系(note〜)命令の動作が以前と一部異なるため
バッファオーバーフローが起こりやすくなる可能性があります。
-
以前のバージョンのdirlist命令で取得されていたファイル名、「.」および「..」は、リストから除外されるように
変更されましたのでご注意下さい。以前は、Windows9xとWindowsNT,2000,XP系で動作に違いがあったものを修正したものです。
-
#module命令で指定されるモジュール名の規則がより厳密にチェックされるようになりました。
このため、スペースや記号を含むモジュール名はエラーとして報告されます。
-
ver2.6以前に出力された「start.ax」などのオブジェクトファイルは、
ver2.6のものと互換性がありません。
必ずソーススクリプト(asファイル)をコンパイルし直して実行させるようにしてください。
ver2.55から、ver2.6までの更新履歴は以下の通りです。
ver2.6
- _break、_continueを標準マクロとして追加した。
- マクロバッファの制限を緩和した。
- 複数行文字列の行頭が#だとプリプロセス命令と解釈される不具合を修正。
- マクロ定義行で文字列内の「//」「/*〜*/」や「;」をコメントに解釈する不具合を修正。
- マクロパラメーターとしてif命令のブロック終了を示す「}」を取らないように修正。
- and、orを使用すると演算が一部おかしくなる不具合を修正。
- 拡張プラグインhspext.dllでdirlist2h命令のオプション128が無効だった不具合を修正。
ver2.6 rc2
- switch〜case〜swendを標準マクロとして追加した。
- hscmp.dllのhsc_refname命令が反映されない不具合を修正。
- #ifdef、#ifndef、#undef命令がモジュール内のマクロ名を認識しない不具合を修正。
- dirlist命令で配列変数を指定した場合は、バッファ自動拡張を行なわないように修正。
- str命令で数値を10桁以上の文字列に変換できない不具合を修正。
ver2.6 rc1
- #define、#constで定義したマクロを「キーワード@」の形式で参照できるように修正。
- #defineマクロの置き換えキーワードに「(」が含まれると誤認識する不具合を修正。
- 無効な行の#if、#ifdef、#ifndefに未定義定数があるとエラーになる不具合を修正。
- mes、print命令にマイナス記号を指定するとエラーになる不具合を修正。
- mref命令で作成したrefstrへのクローンに255文字までしか代入できない不具合を修正。
- クリーンアップモジュール実行時にサブルーチンネストがクリアされるように修正。
- 新規プラグイン情報構造体HSPEXINFOに、refstr、strsizeなどの項目を追加。
- 新規プラグインタイプのHspFunc_getbmscr関数で、ウインドゥIDの有効チェックを付加。
- dd_accept命令をID1以降のウインドゥで実行するとエラーになる不具合を修正。
- notesel命令で配列変数バッファを指定した場合は、バッファ自動拡張を行なわないように修正。
ver2.6 beta17
- 大きなサイズのソースコンパイル時にエラーが出ることがある不具合を修正。
- マクロ置き換えワード直後のスペースやタブが無視される不具合を修正。
- 特殊展開マクロで%tを指定しない場合エラーが発生する不具合を修正。
- 無限に展開がループするマクロを定義した場合にエラーとなるように修正。
- モジュール内で浮動小数などの数値データが認識されないことがある不具合を修正。
- マクロパラメーターの初期値にマイナス値が指定できない不具合を修正。
- 複数行コメントや文字列記述で空行が無視されていた不具合を修正。
- 複数行マクロを使用するとエラー位置がずれる不具合を修正。
- 特殊展開マクロを多重定義することができない不具合を修正。
- 外部ツールの互換を計るためランタイムファイルの検索パスをlibからruntimeに修正。
- #packopt nameにより指定されたファイル名の大文字が認識されるように修正。
- デバッグウインドウで58文字以上の長さの変数を選択すると強制終了する不具合を修正。
- 拡張プラグインで自由なパラメーター取得が可能な新仕様を追加。
- #define命令後のコメントが有効になっている不具合を修正(17a)
- #include命令後にエラー行番号がずれる不具合を修正(17a)
- #ifdefなどでスキップされる行のマクロが展開される不具合を修正(17a)
- 一部の環境でメディア再生のループ時にフリーズする不具合を修正(17a)
ver2.6 beta16
- メモリストリーム機能を設定するmemfile命令を追加。
- ファイル読み込みの際にDPMファイルを明示できる機能を追加。
- run命令にcmdlineパラメーターを渡すオプションを追加。
- 変数の値によって分岐するon〜goto、on〜gosub命令を追加。
- 編集中のファイルを直接実行ファイルに変換する機能(実行ファイル自動作成)を追加。
- 実行ファイル作成時の設定を行なう#pack,#epack,#packoptを追加。
- オブジェクトに割り当てた変数領域の再確保時にobjprm命令が失敗する不具合を修正。
- dirlist命令が常にメモリを再確保する不具合を修正。
- β15で動作しなかったサンプルおよびマクロ定義を修正。
- 数字で始まるモジュール名が使用できなくなっていた不具合を修正。
- 実行ファイル上では初期タイトルバーに「Hot Soup…」の表示を行なわないように修正。
- デバッグ時に_debugマクロ定義を追加するようにした。
ver2.6 beta15
- エラー発生時に指定ラベルにジャンプするonerror命令を追加。
- 画像コピー時に色加算、色減算を行なうgmode5、6を追加。
- loadlib.dll相当の機能を標準命令として内蔵させた。
- モジュール内のラベル展開をver2.55と互換あるものに修正。
- #define、#const命令にglobal指定オプションを追加。
- #define命令にC関数風のパラメータ指定を受け取るためのctype指定オプションを追加。
- マクロ展開時にスタックが溢れることがある不具合を修正。
- マクロの展開時に特殊な動作を行なうオプションを追加。
- 標準マクロとして、for〜next、while〜wend、do〜until構文の定義を追加。
- β14で64K以上のソースコンパイル時にエラーが出る不具合があったのを修正。
- β14でエラー行番号が1行ずれることがある不具合を修正。
- #undef命令が正常に動作していない不具合を修正。
- if命令で「{」〜「}」の階層が深すぎる時に落ちる不具合を修正。
- ファイルの末尾に#endif命令がある時に落ちることがある不具合を修正。
- 単純変数を1024個以上定義した時に変数領域がオーバーフローする不具合を修正。
- [tab]キーによるオブジェクトのフォーカス移動で無効オブジェクトを無視するように修正。
- 環境によってgetpath命令が正常に動作しない不具合を修正。
- getpath命令の小文字変換オプションをデフォルトでOFFに変更した。
- mesbox命令のスタティックテキストで渡した文字列の内容が破壊される不具合を修正。
- noteadd命令のバッファ自動増加に失敗することがある不具合を修正。
ver2.6 beta14
- EXEファイル作成時に実行不可能なファイルができてしまう不具合を修正。
- await命令の仕様を一部変更。Sleepの間隔を指定できるように修正。
- コードコンパイラ(hspcmp.dll)のメッセージが追記されてオーバーフローする不具合を修正。
- プリプロセッサ命令の#elseが正しく機能しないことがある不具合を修正。
- '\'(文字コード92)を指定するとエラーが発生する不具合を修正。
- hspcmp.dllのpack_ini命令でピリオドを含むディレクトリ名を誤認識する不具合を修正。
- includeによるソース結合時にデバッグ情報の行番号がずれる不具合を修正。
- snd命令で一部のマルチメディア再生ができないことがある不具合を修正。
- screen命令など新しいウインドゥ生成時にginfo 1で取得される操作先が反映されるよう修正。
- サブルーチン、モジュールの呼び出し深さ(ネスト)を32重までに修正。
- 全角のマクロを定義した場合に判定を失敗することがある不具合を修正。
- mes,print命令の文法エラーチェックを強化。
- noteadd命令の自動メモリ再確保で文字列区切り(00)が無視される不具合を修正。
- getpath命令で長いパス名の取得に失敗する不具合を修正。
- getpath命令にディレクトリのみを取得するオプションを追加。
- 標準マクロ定義ファイルhspdef.asがない場合は無視するように修正。
- bmpsave命令実行時にエラーで落ちることがある不具合を修正。
ver2.6 beta13
- 新しいプリプロセッサ導入に伴い新規プリプロセッサ命令、マクロを追加。
- noteadd、dirlist命令にバッファ自動増加機能を付加。noteload、notesave命令を追加。
- hspext.dllのsysinfo命令を標準命令として追加。
- [TAB]キーによるオブジェクトのフォーカス移動を行なうオプションをobjmode命令に追加。
- ファイルパス文字列の操作を行なうgetpath命令を追加。
- print,mes命令の出力範囲を取得するオプションをginfo命令に追加。
- フルカラーで初期化されたウインドゥにグレースケールJPEGを読み込み可能に修正。
- 0で除算した際にHSPのエラー(19)が表示されるように修正。
- await命令にスレッド待機による時間待ちオプションを追加。
- chgdisp命令で解像度を変更した際にシステム変数dispx,dispy,paluseが更新されない不具合を修正。
- 文字列変数の代入、memset,memcpy,peek命令使用時に文字列バッファのオーバーフローがエラー表示されるように変更。
- strmid命令でバッファオーバーフローが起きる場合、バッファに収まるサイズのみ取り出すように修正。
- 大きいサイズのmag画像を読み込み失敗する不具合を修正。
- packfileで指定されたテキストファイル読み込み時に、終端が認識されない不具合を修正。
- input命令による入力オブジェクトでEnter,Tabキー入力時にベルが鳴るのを抑制。
- MEPGファイルをsndload命令で扱えないことがある不具合を修正。
- gcopy命令による画像コピーの画面Xサイズが4の倍数でない場合にも正常にコピーされるように修正。
- instr命令を全角文字にも対応させた。
- 暗号化ファイルのアルゴリズム及び格納方法を変更。
- 拡張プラグインhspda.dll、hspext.dll、hspcmp.dllを更新。