Last Update : 2007/04/xx
HSPのソースコード同士をコンパイル直前に結合するプリプロセッサ命令です。
#include "インクルードするHSPスクリプトファイル名"
プログラムが巨大になればソースコードの量も多くなります。1つのファイルに全部の処理を記述するとなると、コーディングやデバッグが大変になります。そこで、内部の処理を振り分けてスクリプトファイル自体も複数用意するわけです。
たとえば、「hoge.hsp」というスクリプトファイルが存在するとします。そして、「hoge.hsp」をインクルードしたメインのスクリプトをコンパイルしたとします。
// 「hoge.hsp」というファイル名で保存 color 255 mes "ハロー、ワールド"
// コンパイルするメインのスクリプト ; hoge.hspをインクルード #include "hoge.hsp" font "MS ゴシック", 20 mes "やあ! こんにちは"
上のスクリプトはコンパイル直前に下と同等の処理内容になります。つまり、#include命令の部分がインクルードしたファイルのデータに置き換わるわけです。
// コンパイルするメインのスクリプト color 255 mes "ハロー、ワールド" font "", 20 mes "やあ! こんにちは"
HSPの開発環境本体に存在する「common」フォルダは、HSPのヘッダーファイルやモジュールファイルなどを入れておくためのフォルダです。HSP 3.2では次のようなファイルが用意されてます。
Win32 API関数の宣言が書かれたヘッダーファイル | advapi32.as、comctl32.as、comdlg32.as、gdi32.as、kernel32.as、ole32.as、shell32.as、user32.as、winmm.as |
HSP拡張プラグインのヘッダーファイル | e3dhsp3.as、hgimg3.as、hgimg.as、hgimgx.as、hsedsdk.as、hsp3imp.as、hspcmp.as、hspcv.as、hspda.as、hspdb.as、hspdx.as、hspext.as、hspinet.as、hspogg.as、hspsock.as |
モジュールファイル, マクロファイル |
form_decode.as、hsp3util.as、hspmath.as、mod_aht.as、mod_fontdlg.as、mod_getenv.as、mod_img.as、mod_joystick.as、mod_menu.as、mod_rss.as、obj.as、d3m.hsp |
たとえば、「hsp3util.as」にはいろいろなモジュール命令が定義されてます。このファイルをインクルードすることで、モジュール命令を利用できるわけです。commonフォルダ内のファイルは、#include命令で「common\\」というパス指定はいりません。
// スタティックテキストオブジェクト ; モジュールをインクルード #include "hsp3util.as" ; スタティックテキストの設置 statictext "あいーん", 100, 20 wait 100 repeat ; スタティックテキストの表示文字列変更 statictext_set 0, ""+cnt wait 50 loop
モジュール命令の説明はモジュール内を参照してください。モジュールを作成したい場合は、HSP本体の「docs\module.htm」の『モジュール機能ガイド(中上級者向け)』を読んでください。
また、この#include命令の処理内容を勘違い(混同)する人がときどきいます。要はこの#include命令は実行ファイルにファイルを埋め込む命令ではありません。
[1] プログラム制御命令で処理を振り分けできない
if命令やswitch命令のようなプログラム制御命令でプリプロセッサ命令の#include命令を振り分けることはできません。コンパイルエラーになります。
// × こんな指定は無理 if a = 1 { #include "hoge1.hsp" } else { #include "hoge2.hsp" }
// ○ 対処 goto *main #include "hoge1.hsp" #include "hoge2.hsp" *main if a=1 { ; hoge1.hspファイルに「*hoge1ラベル+return」の処理 gosub *hoge1 } else { ; hoge2.hspファイルに「*hoge2ラベル+return」の処理 gosub *hoge2 }
[2] HSPのPACKFILE(パックファイル)機能とは無関係
実行ファイルにファイルを埋め込むことができるPACKFILE(パックファイル)機能とは何の関係もありません。PACKFILE機能が目的ならば、プリプロセッサ命令の#pack命令と#epack命令、HSPスクリプトエディタのPACKFILE編集が該当します。
#include命令で指定するファイルは、HSPのスクリプトファイルです。つまり、拡張子が「*.hsp」か「*.as」の2択しかありえません。(HSP2の場合は「*.as」だけ)
// × こんな指定は100%ありえない #include "hoge.wav" #include "hoge.bmp"
[3]
実行ファイルになった時点でインクルードしたファイルの読み込みは不可能
実行ファイルになった時点で、#include命令で指定したファイルを読み込むことはできません。コンパイルの時点でスクリプト同士は完全に結合されているので、実行ファイルの内部には#include命令に相当するデータは存在しません。
// × こんな指定は通常ありえない #include "hoge.hsp" notesel buf noteload "hoge.hsp"