/* HSPコンパイラモジュール Copyright(C) SekiSekki Version:1.0.0 HSPスクリプトエディタを使わずにHSPのコンパイル・実行・実行ファイル生成を行うことができます。 ※ライセンス表示 当ソースコードのライセンス表示は以下のとおりです。 ライセンスは3条項BSDライセンスに相当します。 (凡例: #著作権表示 *本条件 +免責条項) ----------------------------------------------------------------------- # Copyright (c) 2020,SekiSekki All rights reserved. ソースコード形式かバイナリ形式か、変更するかしないかを問わず、 以下の条件を満たす場合に限り、再頒布および使用が許可されます。 * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、 および下記免責条項を含めること。 * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、 上記の著作権表示、本条件一覧、および下記免責条項を含めること。 * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または 販売促進に、SekiSekki(SekiSekki.net)の名前またはコントリビューターの名前を 使用してはならない。 + 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」 提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する 適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。 著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為で あるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、 本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、 使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない) 直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、 一切責任を負わないものとします。 ----------------------------------------------------------------------- */ /*-------HDL 説明事項------------ %dll hspcompile HSPコンパイラモジュール HSPスクリプトエディタを使わずにHSPのコンパイル・実行・実行ファイル生成を行うモジュールです。 %port Win %author Copyright(C) SekiSekki %url https://sekisekki.net/ %note 当モジュールをcommonフォルダにコピーして、#include でインクルードすることで使用可能。 commonフォルダ内にこのファイルが存在するとき、HSP Docs Libraryに自動的に命令が登録されます。 実行ファイルのあるディレクトリにHSPCMP.dllを設置する必要があります。 %group 外部拡張モジュール */ /*/////////////////////////////////////////// %index hspcompile(sample) HSPコンパイラモジュール(概要とサンプルスクリプト) %inst 概要 HSPコンパイラモジュールモジュール %sample ;サンプルスクリプト #include "hspcomplier.hsp" //SAMPLE souecepath="C:\\hsp351\\sample\\demo\\demo.hsp" RuntimePath="C:\\hsp351" hspcompile_SetRuntimeDirectory RuntimePath mes "ランタイムパスの設定:"+stat hspcompile souecepath,0,1//コンパイル+実行(デバッグウインドウ付) mes "デバッグウインドウありでコンパイル実行:"+stat mes "メッセージの取得\n"+hspcompile_GetConsoleMessage()//コンパイラからのメッセージを呼び出す hspcompile souecepath,1//実行ファイル作成 mes "実行ファイルの作成:"+stat mes "メッセージの取得\n"+hspcompile_GetConsoleMessage()//コンパイラからのメッセージを呼び出す %href hspcompile_SetRuntimeDirectory hspcompile hspcompile_GetConsoleMessage %-------------------*/ #module #include "hspcmp.as" *init initf=1 sdim mesbuf,$10000 sdim rtname,256 runtimedir=""+dir_exe+"\\" ;ランタイムフォルダ名 debugexename=""+dir_exe+"\\hsp3.exe";デバッグ実行ファイル名 objname="start.ax" ; オブジェクトファイル名 CommonDirName=""//"common\\" ;コモンファイルディレクトリ名 packfilename="packfile";パックファイル名 hsptmpname="hsptmp";一時ファイル名 objtmpname="obj";一時ファイル名 return #deffunc hspcompile_SetRuntimeDirectory str p1 /*---------HDL 説明事項---------- %index hspcompile_SetRuntimeDirectory 実行ファイル自動生成で使用するhsprtのあるディレクトリの指定 %inst 実行ファイル自動生成で使用するhsprtのあるディレクトリを指定します。 commonディレクトリの設定がされていない場合は同じフォルダにcommonディレクトリがあるものとして、commonディレクトリの登録を行います。 %prm str P1 P1:hsprtのあるディレクトリ名 ) val:戻り値 int:0 正常終了 %href %-------------------*/ if initf=0:gosub *init runtimedir=p1 if (peek(runtimedir,strlen(runtimedir)-1)='\\'|peek(runtimedir,strlen(runtimedir)-1)='/'){}else{ runtimedir+="\\" } if CommonDirName="":hspcompile_SetCommonDirectory runtimedir+"\\common\\"//commonディレクトリの自動追加 return 0 #deffunc hspcompile_SetCommonDirectory str p1 /*---------HDL 説明事項---------- %index hspcompile_SetCommonDirectory commonディレクトリの指定 %inst コンパイル時にインクルードするcommonディレクトリを指定します。 %prm str P1 P1:commonディレクトリ名 ) val:戻り値 int:0 正常終了 %href %-------------------*/ if initf=0:gosub *init CommonDirName=p1 if (peek(CommonDirName,strlen(CommonDirName)-1)='\\'|peek(CommonDirName,strlen(CommonDirName)-1)='/'){}else{ CommonDirName+="\\" } return 0 #deffunc hspcompile_SetDebugExeName str p1 /*---------HDL 説明事項---------- %index hspcompile_SetDebugExeName デバッグ実行時に使用するHSP実行ファイル名指定 %inst デバッグ実行時に使用するHSP実行ファイル名を指定します。 %prm str P1 P1:HSP実行ファイル名 ) val:戻り値 int:0 正常終了 %href %-------------------*/ ;デバッグ実行時に使用するHSP実行ファイル名を指定します。 ;P1 HSPデバッグ実行ファイル名 if initf=0:gosub *init debugexename=p1 return #deffunc hspcompile_SetCommandLine str p1 /*---------HDL 説明事項---------- %index hspcompile_SetCommandLine デバッグ実行時に使用するコマンドラインの指定 %inst デバッグ実行時に使用するコマンドラインを指定します。 %prm str P1 P1:コマンドラインテキスト ) val:戻り値 int:0 正常終了 %href %-------------------*/ CommandLine=p1 return #deffunc hspcompile str p1,int p2,int p3,int p4 /*---------HDL 説明事項---------- %index hspcompile HSPのコンパイル、実行ファイル自動作成を行う %inst HSPのコンパイル、実行ファイル自動作成を行います。 この命令を実行する前に、hspcompile_SetRuntimeDirectoryで 実行ファイル自動生成で使用するhsprtのあるディレクトリを指定する必要があります。 コンパイル+実行のときは"hsp3.exe"が実行ファイルと同じディレクトリに存在する必要があります。 実行ファイル自動作成のときは"hsprt"がカレントディレクトリと同じディレクトリに存在する必要があります。 %prm str P1,int P2,int P3,int P4 P1:ソースファイル名 P2:動作モード 0 デバッグ 1 実行ファイルの自動生成 2 コンパイルのみ P3: (P2がデバッグのときのみ適用されます) 1 デバッグウインドウの表示 P4:0 一時ファイルを削除する 1 一時ファイルを削除しない val:戻り値 int:0 正常終了 int:-1 実行に失敗 int:-2 コンパイルに失敗 %href %-------------------*/ if initf=0:gosub *init st=-3 fname=p1 ; スクリプトファイル名 hsc_ini fname hsc_objname objname hsc_compath CommonDirName if p2=0|p2=2{ hsc_comp 1,0,p3 ; デバッグコンパイル }else{ hsc_comp 0,4,0 ; リリースコンパイル } res=stat if res!=0 {//コンパイルに失敗 hsc_getmes mesbuf return -2 } hsc3_getruntime rtname, objname ; ランタイム名を取得 if p2=0{ cmdexe = "\""+debugexename+"\" "+objname+" "+CommandLine hsc3_run cmdexe ; ランタイムを実行する hsc_getmes mesbuf st=0 }else:if p2=2{ hsc_getmes mesbuf st=0 }else{ hsc3_make runtimedir,1 hsc_getmes mesbuf if instr (mesbuf,0,"Make custom execute file")!=-1{ st=0 }else{ st=-1 } } //一時ファイルの削除 if p4=0{ exist packfilename if strsize>=0:delete packfilename exist objname if strsize>=0:delete objname exist hsptmpname if strsize>=0:delete hsptmpname exist objtmpname if strsize>=0:delete objtmpname } return st #defcfunc hspcompile_GetConsoleMessage /*---------HDL 説明事項---------- %index hspcompile_GetConsoleMessage コンソールメッセージの取得 %inst コンソールメッセージを取得します。 コンパイルエラーの原因と発生箇所等を取得することができます。 %prm () val:戻り値 str:メッセージ %href %-------------------*/ return mesbuf #global