Skip to content

Commit f463f82

Browse files
committed
Fix hspcmp for EMSCRIPTEN
1 parent 55be50a commit f463f82

File tree

10 files changed

+124
-1452
lines changed

10 files changed

+124
-1452
lines changed

src/hsp3/emscripten/supio_emscripten.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,3 +853,23 @@ void Alertf( const char *format, ... )
853853
//alert(UTF8ToString($0));
854854
}, textbf );
855855
}
856+
857+
858+
859+
//
860+
// Memory Manager
861+
//
862+
char *mem_alloc( void *base, int newsize, int oldsize )
863+
{
864+
char *p;
865+
if ( base == NULL ) {
866+
p = (char *)calloc( newsize, 1 );
867+
return p;
868+
}
869+
if ( newsize <= oldsize ) return (char *)base;
870+
p = (char *)calloc( newsize, 1 );
871+
memcpy( p, base, oldsize );
872+
free( base );
873+
return p;
874+
}
875+

src/hsp3/filepack_write.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
#include <stdlib.h>
88
#include <string.h>
99
#include <cctype>
10-
#include <direct.h>
1110

1211
#ifdef HSPWIN
12+
#include <direct.h>
1313
#include "windows.h"
1414
#endif
1515

src/hspcmp/emscripten/hspcmp3.cpp

Lines changed: 94 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,18 @@
1818
#include "../token.h"
1919
#include "../ahtobj.h"
2020

21-
#define DPM_SUPPORT // DPMファイルマネージャをサポート
21+
//#define DPM_SUPPORT // DPMファイルマネージャをサポート
22+
#define DPM2_SUPPORT // DPM2ファイルマネージャをサポート
23+
24+
#ifdef DPM_SUPPORT
2225
#include "../win32dll/dpm.h"
26+
#endif
27+
28+
#define DPM2_SUPPORT // DPM2ファイルマネージャをサポート
29+
#include "../../hsp3/filepack.h"
30+
#define PACKFILE "packfile"
31+
#define DPMFILE "data"
32+
2333

2434
#define EXPORT extern "C" EMSCRIPTEN_KEEPALIVE
2535
#define BOOL int
@@ -37,6 +47,10 @@ static CHsc3 *hsc3=NULL;
3747

3848
extern char *hsp_prestr[];
3949

50+
#ifdef DPM2_SUPPORT
51+
static FilePack filepack; // File Pack Manager
52+
#endif
53+
4054
int main()
4155
{
4256
hsc3 = new CHsc3;
@@ -155,13 +169,22 @@ EXPORT BOOL hsc_comp ( int p1, int p2, int p3, int p4 )
155169
// hsc_comp mode,ppopt,dbgopt (type0)
156170
// ( mode: 1=debug/0=no debug )
157171
// ( 2=preprocessor only )
172+
// ( 4=UTF8 output mode )
173+
// ( 8=strmap output mode )
174+
// ( 16=keyword list mode )
158175
// ( ppopt = preprocessor option )
159176
// ( 0=default/1=ver2.6 mode )
177+
// ( 32=UTF8 input mode )
160178
// ( dbgopt = debug window option )
161179
// ( 0=default/1=debug mode )
162180
/*
163-
int st;
164-
st=tcomp_main( rname, fname, oname, mesbuf, p1, compath );
181+
182+
p1が1(bit0)の場合は、デバッグ情報が付加されます。
183+
p1が2(bit1)の場合はプリプロセス処理のみ行います。
184+
p1が4(bit2)の場合は文字列データをUTF-8コードに変換して出力します。
185+
p1が8(bit3)の場合は使用している文字列データファイル(strmap)を出力します
186+
p1が16(bit4)の場合はキーワード解析リストを出力します
187+
165188
*/
166189
int st;
167190
int ppopt;
@@ -212,14 +235,19 @@ EXPORT BOOL pack_ini ( BMSCR *bm, char *p1, int p2, int p3 )
212235
//
213236
// pack_ini "src-file" (type6)
214237
//
215-
#ifdef DPM_SUPPORT
216-
strcpy(fname,p1);
238+
strcpy(fname, p1);
217239
cutext(fname);
218-
if ( hsc3==NULL ) Alert( "#No way." );
240+
if (hsc3 == NULL) Alert("#No way.");
219241
hsc3->ResetError();
242+
opt1 = 640; opt2 = 480; opt3 = 0;
243+
strcpy(hspexe, "hsprt");
244+
245+
#ifdef DPM_SUPPORT
220246
dpmc_ini( hsc3->errbuf, fname );
221-
opt1=640;opt2=480;opt3=0;
222-
strcpy(hspexe,"hsprt");
247+
#endif
248+
#ifdef DPM2_SUPPORT
249+
filepack.Reset();
250+
filepack.SetErrorBuffer(hsc3->errbuf);
223251
#endif
224252
return 0;
225253
}
@@ -231,10 +259,28 @@ EXPORT BOOL pack_view ( int p1, int p2, int p3, int p4 )
231259
// pack_view (type0)
232260
//
233261
int st;
262+
st = 0;
234263
#ifdef DPM_SUPPORT
235264
st = dpmc_view();
236-
#else
237-
st = 0;
265+
#endif
266+
#ifdef DPM2_SUPPORT
267+
char dpmname[HSP_MAX_PATH];
268+
strcpy(dpmname,fname);
269+
strcat(dpmname, ".dpm");
270+
char tmp[1024];
271+
272+
if (p1 == 0) p1 = -1;
273+
int res = filepack.LoadPackFile(dpmname, p1);
274+
if (res<0) {
275+
sprintf(tmp,"#Error %d in loading [%s].",res, dpmname);
276+
filepack.Print(tmp);
277+
st = 1;
278+
}
279+
else {
280+
sprintf(tmp, "#[%s] Loaded.", dpmname);
281+
filepack.Print(tmp);
282+
filepack.PrintFiles();
283+
}
238284
#endif
239285
return -st;
240286
}
@@ -248,11 +294,22 @@ EXPORT BOOL pack_make ( int p1, int p2, int p3, int p4 )
248294
// key : (0=Default/other=New Seed)
249295
//
250296
int st;
297+
st = 0;
251298
#ifdef DPM_SUPPORT
252299
if ( p2 != 0 ) dpmc_dpmkey( p2 );
253300
st=dpmc_pack(p1);
301+
#endif
302+
303+
#ifdef DPM2_SUPPORT
304+
if (p2 == 0) p2 = -1;
305+
#ifdef HSPWIN
306+
p1 = (int)GetTickCount(); // Windowsの場合はtickをシード値とする
254307
#else
255-
st = 0;
308+
p1 = (int)time(0); // Windows以外のランダムシード値
309+
#endif
310+
if (filepack.SavePackFile(fname, PACKFILE, p1, p2) < 0) {
311+
st = 1;
312+
}
256313
#endif
257314
return -st;
258315
}
@@ -286,10 +343,9 @@ EXPORT BOOL pack_exe ( int p1, int p2, int p3, int p4 )
286343
// pack_exe mode (type0)
287344
//
288345
int st;
346+
st = 0;
289347
#ifdef DPM_SUPPORT
290348
st=dpmc_mkexe(p1,hspexe,opt1,opt2,opt3);
291-
#else
292-
st = 0;
293349
#endif
294350
return -st;
295351
}
@@ -301,10 +357,14 @@ EXPORT BOOL pack_get ( BMSCR *bm, char *p1, int p2, int p3 )
301357
// pack_get "get-file" (type6)
302358
//
303359
int st;
360+
st = 0;
304361
#ifdef DPM_SUPPORT
305362
st=dpmc_get(p1);
306-
#else
307-
st = 0;
363+
#endif
364+
#ifdef DPM2_SUPPORT
365+
if (filepack.ExtractFile(p1,NULL,p2) < 0) {
366+
st = 1;
367+
}
308368
#endif
309369
return -st;
310370
}
@@ -374,15 +434,33 @@ EXPORT BOOL hsc3_make ( BMSCR *bm, char *p1, int p2, int p3 )
374434
hsc3->ClosePackfile();
375435

376436
// exeを作成
437+
st = 0;
377438
#ifdef DPM_SUPPORT
378439
dpmc_ini( hsc3->errbuf, fname );
379440
st=dpmc_pack( 0 );
380441
if ( st ) return -st;
381442
st=dpmc_mkexe( type, hspexe, opt1, opt2, opt3 );
382443
strcat( fname, ".dpm" );
383444
delfile( fname );
445+
#endif
446+
#ifdef DPM2_SUPPORT
447+
int myseed1,myseed2;
448+
#ifdef HSPWIN
449+
myseed1 = (int)GetTickCount(); // Windowsの場合はtickをシード値とする
384450
#else
385-
st = 0;
451+
myseed1 = (int)time(0); // Windows以外のランダムシード値
452+
#endif
453+
myseed2 = hsp3_flength(PACKFILE);
454+
455+
filepack.Reset();
456+
filepack.SetErrorBuffer(hsc3->errbuf);
457+
st = filepack.SavePackFile(fname, (char *)PACKFILE, myseed1, myseed2);
458+
if (st < 0) {
459+
return -1;
460+
}
461+
st = filepack.MakeEXEFile(type, hspexe, fname, myseed2, opt1, opt2, opt3);
462+
strcat(fname, ".dpm");
463+
delfile( fname );
386464
#endif
387465
return -st;
388466
}

0 commit comments

Comments
 (0)