hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
OpenHSPのチュートリアル - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

ソフト開発

OpenHSPのチュートリアル

事前知識

  • HSPのソースはC++で書かれています。とはいえ、ほとんどBetter C(と一部クラスと例外が使われているくらい)と標準Cライブラリで構成されています。
  • OpenHSPのソースはSubversionで管理されています。変更の履歴や、過去のソースを閲覧できるようになっている他、ソースをまとめてダウンロードすることもできます。
    • Tracによりweb上から簡単にソースや変更履歴にアクセスできます。タイムラインで最近の更新を確認できたり、リポジトリブラウザからソースを閲覧できたりします。
    • リポジトリ内のtrunkフォルダ内が開発の本流です。
    • この記事ではHSP本体のソースに絞って見ていきますが、OpenHSPでは標準エディタやドキュメント、プラグインなども開発しています。
    • OpenHSPのソースコードを更新するにはコミッタになる必要があります。コミッタになりたい人はおにたまさんにメールで連絡をとります。
  • OpenHSPのソースコードはBSDライセンスです。License_j.txtLicense.txtにかかれている条件を満たせば改編、複製、公開、配布することができます。

HSPの実行手順

HSPは以下のような手順で実行されます。

  1. hspcmp.dll内のプリプロセッサにより入力されたスクリプト(*.hsp)からプリプロセス済みのスクリプトを出力します。これは#defineや#includeなどのプリプロセッサ命令を処理します。
  2. hspcmp.dll内のコードジェネレータによりプリプロセス済みスクリプトをAXファイル(start.axやobj)に変換し出力します。
  3. hsp3.exeがAXファイルを読み込みそれを解釈しながら実行します。

hsp-phase3.png

  • プリプロセス済みのスクリプトは#cmpopt ppout 1をスクリプトに挿入することでファイルに出力することができます。(hsptmp.iというファイル名で出力されます)
  • リポジトリのhspcmpフォルダ内がhspcmp.dllのソース、hsp3フォルダ内がhsp3.exe(などのランタイム)のソースです
  • 標準エディタは「コンパイル+実行」時にhspcmp.dllの呼び出しとランタイムEXEの実行を行っています。

ソースを読むにあたって

ソースコードを読むための技術という素晴らしい文書があります。ぜひ読んでみてください。OpenHSPのソースを読む上でも役に立つことでしょう。

環境設定

OS:WindowsXP SP3
IDE:Microsoft Visual C++ 2008 Express Edition
HSP:ver.3.1 
OpenHSP:ver.3.2beta1

以上の構成で進めていきます。

  • Visual C++ は Visual Studio 2008 Express Editions からダウンロードします。 Web インストール (ダウンロード) をクリック。ダウンロード後に実行して後はひたすらOKをクリック。
  • OpenHSPはSubversionがインストールされていたらコマンドプロンプトから 「svn co http://dev.onionsoft.net/svn/openhsp/trunk openhsp」でカレントディレクトリのopenhspフォルダにチェックアウトされます。
  • svnが入っていない場合は /trunk - OpenHSP - Trac からダウンロードします。ページの下のほうの 異なるフォーマットでダウンロード:Zip Archive をクリック。

ビルド

hsp3のビルド

hsp3をビルドしてOpenHSP版のhsp3.exeを作成します。

  1. ダウンロードしたOpenHSPのフォルダの trunk\hsp3\win32gui\hsp3_vc2008.vcproj を開く。
  2. ソリューション構成を Release に変更します。
    2008y11m01d_220546174.jpg
  3. その後F7でビルド開始。警告がたくさん出ますが気にせずに。(本来は気にしないといけないんですが)
  4. trunk\hsp3\win32gui\Release\hsp3.exe が出力されているはずです。
  • 出力されたhsp3.exeを実行しても「Error Startup failed.」というメッセージボックスが表示されるだけですが問題ありません。
  • hsp3clも同じ方法でtrunk\hsp3\win32\hsp3cl_vc2008.vcprojを開いてビルドすればOKです。

HSPとOpenHSPのランタイムの切り替え

  1. 先ほど出力された trunk\hsp3\win32gui\Release\hsp3.exehsp3-trunk.exe という名前に変更します。
  2. 通常のHSPがインストールされているフォルダ(通常ならProgram Files\hsp31)に移動します。
  3. フォルダ内にhsp3.exeというファイルがあると思うので hsp3-31.exe という名前に変更してください。
  4. このフォルダに先ほどリネームした hsp3-trunk.exe をコピーしてください
  5. HSPエディタを立ち上げて1行目に #runtime "hsp3-trunk" と記入してF5で実行。
  • 真っ白いウィンドウにタイトルが 「OpenHSP ver.3.2beta1」 と表示されていればOpenHSPでの実行は成功です。
  • 通常のHSPで実行したいときは先ほどの1行目を #runtime "hsp3-31" とすれば切り替えることが可能です。

hspcmpのビルド

hspcmp.dllをビルドします。基本的にhsp3のビルドと同じです。

  1. trunk\hspcmp\win32dll\hspcmp_vc2008.vcprojを開きます。
  2. ソリューション構成をReleaseにし、F7でビルド。
  3. trunk\hspcmp\win32dll\Release\hspcmp.dll が出力されます。
  • あとはHSPのインストールされているフォルダのhspcmp.dllだけなのですが、hspcmp.dllは実行ランタイムと違ってファイル名を指定して切り替えたりはできません。また、エディタを開いている間はhspcmp.dllが使われていてロックされているので上書きできません。ので、hspcmp.dllを切り替えたいときはエディタを一旦終了させてhspcmp.dllへ上書きコピーするしかありません。
  • trunk\hspcmp\win32\hspcmp.vcprojを開いてビルドすれば実行ファイル版のhspcmp.exeを生成できます。

各ソースファイルの簡単な説明

hsp3struct.h
構造体や定数の定義
hsp3int.h
hsp3int.cpp
基本的な標準命令・関数(TYPE_INTCMD, TYPE_INTFUNC)の定義
hsp3code.h
hsp3code.cpp
中間コードの実行
stack.h
stack.cpp
式の評価での値や、関数のフレームなどを格納するスタック
strnote.h
strnote.cpp
文字列を行ごとに扱って追加・削除・取得などを行えるユーティリティ(note系命令の実装に使われる)
strbuf.h
strbuf.cpp
malloc/freeのラッパ
hsp3.h
hsp3.cpp
HSPの初期化・読み込み・終了処理など
supio.h
win32gui/supio_win.h
win32gui/supio_win.cpp
Shift_JISを考慮した文字列処理や、ファイル関係や日時の取得などのプラットフォームに依存する部分などのユーティリティ
hspvar_core.h
hspvar_core.cpp
変数の管理
hspvar_label.h
hspvar_label.cpp
変数型labelの定義
hspvar_str.cpp
変数型strの定義
hspvar_double.cpp
変数型doubleの定義
hspvar_int.cpp
変数型intの定義
hspvar_struct.cpp
変数型structの定義
hsp3debug.h
エラーコード、hsp3debug.dllとの通信用構造体、定数の定義
hsp3debug.cpp
エラーメッセージの定義と取得用関数
makefile
makefile.linux
MinGWやUnixでのビルド用makefile(VC++でのビルドでは関係ありません)
hsp3config.h
コンパイルスイッチ、キャプションやバージョンの定義
token.h
CTokenクラス(プリプロセッサとコードジェネレータ)のヘッダ
token.cpp
プリプロセッサ
codegen.cpp
コードジェネレータ
hspcmd.cpp
予約語の定義
label.h
label.cpp
CLabelクラス(識別子の管理)
errormsg.h
errormsg.cpp
コードジェネレータのエラーコードとメッセージ
hsc3.h
hsc3.cpp
CHsc3クラス(コンパイラ)
localinfo.h
localinfo.cpp
__DATE__, __TIME__定義用の日時取得
main.cpp
コンソール版のエントリポイント
membuf.h
membuf.cpp
CMemBuf?クラス(汎用メモリバッファ)
strnote.h
strnote.cpp
文字列を行ごとに扱って追加・削除・取得などを行えるユーティリティ(note系命令の実装に使われる)
supio.h
win32/supio_win.h
win32/supio_win.cpp
Shift_JISを考慮した文字列処理や、ファイル関係や日時の取得などのプラットフォームに依存する部分などのユーティリティ
tagstack.h
tagstack.cpp
CTagStack?クラス(#define特殊展開マクロ用スタック)
win32dll/hspcmp3.cpp
DLLの外部公開関数

関連ページ

コメント

  • 手始めにHSPTVのaxファイルからソースを復元でもするか!axファイルは暗号化されてないしな! -- 2009-02-06 (金) 19:22:20

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filehsp-phase3.png
317件 [詳細]
filehsp-phase2.png
201件 [詳細]
filehsp-phase.png
193件 [詳細]
file2008y11m01d_220546174.jpg
360件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2009-06-29 (月) 18:01:21 (1622d)