HSPコンパイラモジュール hspcompiler.hsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
/*
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
 
%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